Generieren Sie eine Reihe von Daten mit SQL
Ich habe eine SQL-Abfrage, die einem date-parameter (wenn ich werfen Sie es in eine Funktion) und ich muss es auf jeden Tag des letzten Jahres.
So erzeugen Sie eine Liste der letzten 365 Tage, so dass ich verwenden können, straight-up-SQL zu tun?
Offensichtlich erzeugt eine Liste 0..364 funktionieren würde, auch, da könnte ich immer:
SELECT SYSDATE - val FROM (...);
InformationsquelleAutor der Frage George Mauer | 2009-01-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Notwendigkeit, extra großen Tabellen oder einer Tabelle ALL_OBJECTS:
wird den trick tun.
InformationsquelleAutor der Antwort user34850
wenn ein 'von' und 'bis' - Datum ersetzt, an die Stelle der DATEPART-und der DATEPART-365, ist die Ausgabe eine Reihe von Daten zwischen dem von-und bis-Datum.
InformationsquelleAutor der Antwort user853322
Ich hatte kürzlich ein ähnliches problem und löste es mit dieser easy-Abfrage:
Beispiel
Ergebnis
InformationsquelleAutor der Antwort AndrewMcCoist
Oracle-spezifisch ist, und der sich nicht auf bereits bestehenden großen Tabellen oder komplizierten system von Ansichten über die data-dictionary-Objekte.
InformationsquelleAutor der Antwort Gary Myers
Einer Methode, die Recht Häufig verwendet in Oracle ist so etwas wie dieses:
Persönlich, wenn eine Anwendung eine Notwendigkeit für eine Liste der Termine dann würde ich einfach eine Tabelle erstellen mit Ihnen, oder erstellen Sie eine Tabelle mit einer Reihe von zahlen bis zu etwas lächerliches wie eine million, die verwendet werden können für diese Art der Sache.
InformationsquelleAutor der Antwort David Aldridge
Etwa ein Jahr und eine Hälfte zu spät, aber für die Nachwelt hier ist eine version für Teradata:
InformationsquelleAutor der Antwort Chris
Ahahaha, hier ist eine lustige Art, ich kam gerade mit, dies zu tun:
wo shipment_weights ist irgendeine große Tabelle;
InformationsquelleAutor der Antwort George Mauer
Ich hatte die gleiche Anforderung - ich benutze nur dieses. Der Benutzer gibt die Anzahl der Tage, durch die er/Sie will zur Begrenzung der Kalender-Sortiment auf.
Ich die obigen Ergebnis-set als treibende Ansicht in
LEFT OUTER JOIN
mit anderen Ansichten mit Tabellen, die haben Termine.InformationsquelleAutor der Antwort Suddha
In der Woche von 6 Monaten zurück
wenn du weglassen, ROWNUM erhalten Sie 50 Zeilen nur, unabhängig vom Wert.
InformationsquelleAutor der Antwort Victor H
Datumsbereich zwischen 12/31/1996 und 12/31/2020
InformationsquelleAutor der Antwort Igor Krupitsky
Nur so zum Spaß, hier ist etwas code, der funktionieren sollte, die in SQL Server, Oracle oder MySQL:
Bonus-Punkte, wenn Sie können, geben Sie mir einen cross-Plattform-syntax zu re-verwenden Sie die zahlen-Tabelle.
InformationsquelleAutor der Antwort Joel Coehoorn
Besser spät als nie. Hier ist eine Methode, die ich entwickelt (nach der Lektüre dieses post) für die Rückgabe einer Liste von Daten, der Folgendes umfasst: (a) 1. Tag des aktuellen Monats bis heute, PLUS (b) alle Termine für die letzten zwei Monate:
"-2" ist die Anzahl der vorherigen Monate von Daten umfassen. Zum Beispiel, on Juli 10th, dieses SQL liefert eine Liste aller Termine von Mai 1 bis 10. Juli - also zwei volle Vorherige Monate plus den aktuellen Monat teilweise.
InformationsquelleAutor der Antwort Mark T.
Habe ich nicht die Antwort auf re-verwenden Sie die zahlen-Tabelle, aber hier ist ein Codebeispiel, das die Arbeit mindestens in SQL server und ist ein bisschen schneller.
InformationsquelleAutor der Antwort
Diese Abfrage erzeugt eine Liste der Termine 4000 Tage in die Zukunft und 5000 in der Vergangenheit wie heute (in Anlehnung an http://blogs.x2line.com/al/articles/207.aspx):
InformationsquelleAutor der Antwort Eelco