SQL Get max Datum im Datensatz für jeden Monat
Ich habe eine Tabelle mit INT-id und DATETIME Datum, unter anderen Bereichen. Zeilen eingefügt werden in dieser Tabelle für jeden Werktag (nicht garantiert), und mehrere andere Tabellen verwenden diese id als Fremdschlüssel.
Meine Frage ist, wie bekomme ich die id für das max-Datum pro Monat, die ich dann nutzen kann um die Verknüpfung zu anderen Tabellen? Zum Beispiel, wenn der Prozess lief heute, ich würde wollen, um zu sehen, Daten für Jan 31, Feb 28, ... , Oct 31, Nov 23.
Ich bin mit SQL Server 2005.
InformationsquelleAutor Nick Vaccaro | 2009-11-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist nicht genug, denn jetzt bist du das kombinieren, das im November vergangenen November und der November vor, dass, usw. MONAT() gibt eine Ganzzahl zurück (November = 11).
Ihre Abfrage auch nicht funktionieren, aus zwei Gründen: (a) es gibt keine Spalte "d" in der abgeleiteten Tabelle "a"... und (b) mit Hilfe der MAX() geht davon aus, dass die id ist immer inkrementell. Was ist, wenn Sie die Reparatur der Tabelle und regenerieren stats in der falschen Reihenfolge? Meine Abfrage schaut auf das höchste Datum, nicht die höchste Ersatzschlüssel.
InformationsquelleAutor Aaron Bertrand
Dieser wird ziehen Sie den Monat und das Jahr und die Letzte-id:
Und hier ist ein test-Skript
InformationsquelleAutor Joel
Ich nehme an, Sie wollen nur den letzten Tag des Monats, Sie haben einen Datensatz für (zB. Jan 30, wenn Sie haben nichts für Jan 31).
InformationsquelleAutor lins314159
Ich würde wählen Sie wieder die maximale Datum mit einer group by-Abfrage wie diese:
Die obige Abfrage wird Ihnen wieder die maximale Datum der Transaktion für jeden Monat. Um die maximale Id, das Datum für jeden Monat, kommen die Ergebnisse von dieser zurück auf die Quelltabelle man die max id für diesen Tag.
So, Ihr full-Abfrage würde wie folgt Aussehen:
Stimmt, aber diese Lösung ist auch mehr tragbar, weil es hängt nicht von features, die es nur in SQL2005 oder später.
Der Benutzer hat angegeben, Sie sind auf SQL Server 2005, und würde ich eher den Vorteil der verfügbaren Funktionen als schreiben schlecht durchführen, Vanille pur SQL in den ungeraden Fall, dass wir eines Tages wechseln, Oracle oder DB2. Wird nicht passieren, und ist ein sehr Seltenes Szenario, in diesen Tagen. In jedem Fall, an diesem Punkt, die Festsetzung Abfragen, wie dies die am wenigsten Ihrer sorgen.
InformationsquelleAutor Joe Barone