2015-07-13 6 views
5

Lessons Tablevalori per l'ordine in SQL

Esiste un modo che potrebbe ordinare i valori sul tavolo in modo da ottenere una settimana (Lunedi-Domenica) e poi la prossima settimana, come è descritto prossima

Monday ....... 
Tuesday ...... 
Wednesday .... 
Thursday ..... 
Friday ....... 
Saturday ..... 
Sunday ....... 

Monday ....... 
Tuesday ...... 
Wednesday .... 
Thursday ..... 
Friday ....... 
Saturday ..... 
Sunday ....... 

Monday ....... 
Tuesday ...... 
Wednesday .... 
Thursday ..... 
Friday ....... 
Saturday ..... 
Sunday ....... 

Se è necessario, posso modificare la struttura della tabella. Spero che abbia senso.

+0

Ci dovrebbe essere almeno una colonna nella tabella che specifica l'ordine delle settimane per farlo. – Sid

+2

hai bisogno di una data per ordinare i giorni – Priyank

+0

come vengono inseriti i dati in base alla data o qualcosa del genere? – Raghavendra

risposta

1
SELECT lid, ordinal,DAY, class, teaher, STARTS, ENDS FROM (
    SELECT lid, ordinal, DAY, class, teaher, STARTS, ENDS, 
    IF(@myvar = 0 OR @myvar = ordinal, @counter := @counter + 1, @counter := 1) sequence, 
    @myvar := ordinal FROM mytable 
    JOIN (SELECT @myvar := 0, @counter := 0) a 
    ORDER BY ordinal , lid) b 
ORDER BY sequence, ordinal , lid 

Prova questa ricerca. Non l'ho provato localmente.

domanda simile che ho risposto è here

EDIT:

Per risolvere le questioni sollevate nei commenti qui sotto

1) Come funziona?

Prendere la query interna ed eseguirla separatamente. Assegna una sequenza per tutte le righe in modo tale che ogni volta che si ripete, il contatore incrementa il numero. Quando viene trovato un nuovo ordinale, azzera il contatore a 1. Ora, con l'aiuto della query esterna, ordina il risultato per la sequenza e mostra il risultato. Sarebbe meglio spiegarlo se esegui queste query separatamente e analizzi il risultato ad ogni passaggio

2) Come ottenerlo in un ordine inverso?

cambiare l'ordine finale come ORDER BY sequence desc, ordinal , lid

+0

Grazie mille ha funzionato! Se non è chiedere troppo, mi piacerebbe 1) se potessi spiegare come funziona, 2) come posso fare il contrario (andando in ordine crescente). Ho provato a cambiare DESC per ASC ma è leggermente spento; va 0,2,3,4,5,6,0,1,2,3,4,5,6 – Gacci

+0

@ Gacci Ho modificato la risposta con una breve spiegazione. – Akhil

0

creare una tabella con giorno della settimana ed un orderingnumber. Quindi unisciti a questa tabella per ordinare. poiché i giorni della settimana sono memorizzati come testo, è possibile mapparlo solo a un numero di ordine.