2016-04-02 16 views
0

Hallo meine Tabellenstruktur ist wie dieseSQL-Abfrage Sortierung Jahr/Monat

year month name 
2015 1  adc 
2015 2  adc 
2015 4  adc 
2015 5  adc 
2015 6  adc 
2015 7  adc 
2015 8  adc 
2015 9  adc 
2015 10 adc 
2015 11 adc 
2015 12 adc 
2016 1  adc 
2016 2  adc 
2016 3  adc 

Ich möchte meine Abfrage-Ergebnis immer sortieren von Monat ab dem 4. des Jahres und enden mit Monat 3 des nächsten year.for Beispiel, wenn Ich möchte Daten des Jahres 2015 sollte es wie

sein
2015 4  adc 
    2015 5  adc 
    2015 6  adc 
    2015 7  adc 
    2015 8  adc 
    2015 9  adc 
    2015 10 adc 
    2015 11 adc 
    2015 12 adc 
    2016 1  adc 
    2016 2  adc 
    2016 3  adc 

kann ich dies mit SQL-Abfrage tun? hier muss ich für Monat 12

+2

Mögliches Duplikat von [Wie ein benutzerdefinierten Auftrag für Auftrag in mySQL definieren] (http://stackoverflow.com/questions/9378613/how-to-define-a- custom-order-by-order-in-mysql) –

Antwort

1

Sie mehrere Spalten für eine Bedingung kombinieren können auch das Jahr erhöhen:

select * 
from my_table t 
where (year, month) >= (2015, 4) 
    and (year, month) <= (2015+1, 3) 
order by year, month 

Dieses eine (in der Theorie) sollte (Jahr, Monat) Index verwenden.

0

löste es dank

select * 
from my_table t 
where (year=$year and month>=4) 
    or(year=$year+1 and month<=3) 
order by year, month 
+0

Verwenden Sie den Bearbeitungslink zu Ihrer Frage, um weitere Informationen hinzuzufügen. Die Schaltfläche Post-Antwort sollte nur für vollständige Antworten auf die Frage verwendet werden. - [Aus Bewertung] (/ review/low-quality-posts/11877629) – semirturgay

+0

ja, das ist eine vollständige Antwort, das ist eigentlich die Lösung – sanu

+0

Wenn möglich, halten Sie Ihren Code flexibel für die Änderung der Anforderungen. Was werden Sie tun, wenn Sie die Einträge von 04/2013 bis 03/2016 möchten? –