Sortieren nach Datum in SQL
Habe ich ein Ressourcen-Tabelle eines der Felder ist ein Datum-Feld mit dem Datentyp Datum. Ich möchte folgende Ausgabe:
Aktuellen Monat Datensätze (sagen Kann - jährige ist nicht wichtig)
Dann die folgende (wieder, vorausgesetzt, Möglicherweise ist der aktuelle Monat)
- Juni Datensätze
- Juli Datensätze
- August Datensätze
- September Aufzeichnungen
- Oktober Datensätze
- November Datensätze
- Dezember Datensätze
- Januar Datensätze
- Februar Datensätze
- März Datensätze
- April Records
Kommen. Juni, Juni ist der aktuelle Monat und dann die Reihenfolge wäre:
- Juli Datensätze
- August Datensätze
- ...
Hier ist mein SQL...ich weiß nicht, wie UM den Ausgang zu erreichen der gewünschten Reihenfolge (5,6,7,8,9,10,11,12,1,2,3,4):
SELECT
resource_id,
resource_title,
resource_summary,
resource_category,
resource_status,
resource_date,
DATEPART(month, resource_date) AS resource_month,
DATEPART(day, resource_date) AS resource_day
FROM dbo.resources
WHERE (resource_category = N'Quotes')
AND (resource_status <> N'Draft')
Fand ich diese mögliche Lösung für MySQL:
aber mir fehlt etwas an mein Ende.
- Ja, SQL Server 2008
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der erste term stellt die primäre, um durch den Monat
resource_date
(der aktuelle Monat wird der erste sein, der vorige, Letzte). Der zweite term Aufträge der Zeitstempel innerhalb von einem Monat, unabhängig von dem Jahr des Datums. Wenn Ihre Daten nicht enthalten, die Zeit teilen, oder wenn die Zeit, die Teile sind absolut irrelevant, Sie könnte ersetzen Sie es mitDAY(resource_date)
. Endlich, der Letzte Ausdruck nimmt die Jahres-Rechnung für den ansonsten identischen Daten (könnte auch einfachresource_date
).dbo.qry_resources_quotes
(die, so vermute ich, ist definiert durch die Vorherige Abfrage, dieSELECT TOP (100) PERCENT...
eine).CREATE VIEW
:Note. The ORDER BY clause is used only to determine the rows that are returned by the TOP clause in the view definition. The ORDER BY clause does not guarantee ordered results when the view is queried, unless ORDER BY is also specified in the query itself.
Wird es für Sie arbeiten?
ORDER BY
CASE DATEPART(month, resource_date)
WHEN 5 THEN 0
WHEN 6 THEN 1
... etc
END
Ich denke, so etwas könnte das sein, was du suchst:
Wie 'bout
ORDER BY (DATEPART(month,resource_date) - (DATEPART(month,getdate() -1)) % 12)
So, die im Mai (Monat 5), werden Sie, um durch den Monat in der Zeile -6 (mod 12). So, Juni (Monat 6) wäre 0, Juli (7) wäre 1.
Im Juni, Juli wäre 0, etc.
Sollten Sie in der Lage sein, die Anpassung des MySQL-Lösung mit
DATEPART
stattDATE_FORMAT
:Ich habe keine SQL Server-praktisch, also ich bin mir nicht sicher, ob es glücklich sein wird, mit einem Wert in der ORDER BY-Klausel, obwohl. Wenn es nicht wie die booleschen BESTELLUNG DURCH, dann sollte den trick tun:
Ich gehe davon aus, dass es innerhalb eines Jahres in "resource_date" - oder doch nicht?
In diesem Fall können Sie einfach die filter und order by
Wenn es kein Jahr (oder genauer: verschiedenen unbekannten Jahre) Sie können dies tun:
Hoffe, es half ...