Ich habe tägliche Bestandsdaten in einer Tabelle gespeichert, und ich möchte in der Lage sein, etwas wie "Was sind die Daten der letzten 5 Handelstage" abzufragen . Das Problem ist, dass ich keine Daten für Wochenenden oder Feiertage habe, die die Tageszählung wegwerfen. Die anderen ähnlichen Fragen zeigen mir, dass manche Leute einen Feiertagstisch haben, wo sie die Feiertage speichern, aber ich hoffe, das zu vermeiden, da ich weiß, dass, wenn es keine Daten gibt, dieser Tag ein Wochenende oder ein Feiertag war . Die einzige Möglichkeit, wie ich dachte, ich könnte dies tun, ist zunächst eine erste Abfrage ausführen, die jeden Handelstag sequenziell aufgezählt, und dann kann ich eine Abfrage auf diese Weise ausführen, aber ich hatte gehofft, vielleicht gab es einen besseren Weg zu tun es.sql Abfrage, um die letzten N Handelstage, nicht einschließlich Wochenenden und Feiertagen zu erhalten
Antwort
Haben Sie eine "Tabelle der Tage", Tabelle mit einer Zeile für jeden Tag, und eine Spalte, die angibt, ob ein Handelstag ist oder nicht. Es gibt wirklich keinen Grund, sich dieser Lösung zu widersetzen, sie hat sich bereits viele, viele Male als effizient und richtig erwiesen. Versuchen Sie nicht, diese einfache Lösung zu überlisten, Sie werden nur Schmerzen verursachen.
Danke Remus, nachdem ich den obigen Link gelesen habe, denke ich, dass es am besten ist, einen separaten Tisch zu haben, also werde ich diesen Weg gehen. – steve8918
Ihre beste Option ist die Verwendung der DENSE_RANK-Option, die am Handelsdatum rangiert. Im folgenden Beispiel wird vorausgesetzt, dass Sie SQL verwenden 2008.
CREATE TABLE #test (id INT IDENTITY(1, 1), trading_date DATETIME, stock_key INT, stock_count INT)
;WITH dates AS(SELECT DISTINCT DENSE_RANK() OVER (ORDER BY CAST(trading_date AS DATE) DESC) AS days_ago,
CAST(trading_date AS DATE) AS trading_date FROM #test)
SELECT t.* FROM #test t, dates d
WHERE d.days_ago = 5 AND t.trading_date >= d.trading_date
Die gemeinsame Tabellenausdruck ist unbedingt notwendig, aber ich habe es so formatiert, um es besser lesbar zu machen. Wenn Sie SQL 2005 verwenden, müssen Sie die Besetzung auf dem Laufenden zu ändern, wie zu
CAST(FLOOR(CAST(trading_date AS FLOAT)) AS DATETIME)
Um nur den Datumsteil des Datetime-Feld abzurufen. Natürlich, wenn Sie 2008 verwenden und Sie einen DATE-Feldtyp haben, um damit zu beginnen, können Sie die Besetzung ganz wegnehmen.
Danke Peter, ich werde damit experimentieren, aber es sieht so aus, als würde ich die separate Tischroute gehen. – steve8918
- 1. Hinzufügen von n Werktagen zu einem bestimmten Datum Ignorieren von Feiertagen und Wochenenden in Python
- 2. SQL SELECT, um die ersten N positiven Ganzzahlen zu erhalten
- 3. SQL-Abfrage, um die größten Preissenkungen zu erhalten
- 4. Sql-Abfrage Um Daten zu erhalten
- 5. Sql-Abfrage, um den durchschnittlichen Umsatz von jedem Produkt für die letzten n Zeitraum
- 6. Hinzufügen von Werktagen zu Datum unter Berücksichtigung von Wochenenden und Feiertagen
- 7. Abfrage, um die neuesten Spielergebnisse zu erhalten
- 8. Was ist die SQL-Abfrage für diese Aufgabe, um den ersten und letzten Eintrag zu finden?
- 9. Was ist der kürzeste Weg, um die letzten N Elemente eines Arrays zu erhalten?
- 10. SQL-Abfrage, um verschiedene Datensätze aus zwei Tabellen zu erhalten
- 11. Schreibe SQL-Abfrage, um erwartete Ausgabe zu erhalten
- 12. SQL-Abfrage, um Misc-Spalte Informationen zu erhalten
- 13. SQL-Abfrage, um den vollständigen Hierarchiepfad zu erhalten
- 14. Oracle SQL-Abfrage, um Verkäufe nach Datumsbereich zu erhalten
- 15. sql-Abfrage, um Inhalt älter als 3 Wochen zu erhalten
- 16. SQL Server-Abfrage, um jeden Tag Zählwert zu erhalten
- 17. Mysql Abfrage, um die Anzahl pro Monate zu erhalten
- 18. Wie kann ich LEFT & RIGHT Funktionen in SQL verwenden, um die letzten 3 Zeichen zu erhalten?
- 19. SQL-Abfrage, um die besten "n" Punkte aus einer Liste zu bekommen
- 20. Abfrage, um freie Zeit zu erhalten MYSQL
- 21. Vorschläge Pivot-Abfrage in SQL Server zu ändern, um die gewünschten zu erhalten Ausgabe
- 22. Split-Byte-Array, um die ersten 12 Zeichen und die letzten 12 Zeichen zu erhalten (Java)
- 23. SQL und PHP müssen Abfrage erhalten
- 24. SQL-Abfrage: Ändern, um die Ausführungszeit zu verbessern
- 25. sql Abfrage zu zeigen Aufzeichnungen erstellt heute, letzte Woche und letzten Monat
- 26. MySQL-Abfrage, um alle Fotos zu erhalten
- 27. SQL gespeicherte Prozedur, um ein Benutzerobjekt zu erhalten und dann die Werte dieses Objekts zu aktualisieren
- 28. Neo4j Cypher-Abfrage, um den gesamten Graphen anzuzeigen, einschließlich Beziehungseigenschaften?
- 29. SQL-Abfrage, um die letzten Benutzer abzurufen, die nach Datum sortierte Inhalte erstellt haben
- 30. Letzten Wert erhalten, die nicht ‚None‘ ist
Relevant: http://stackoverflow.com/questions/457176/how-do-i-de-termine-a-public-holiday-in-sql-server –
[Warum sollte ich eine zusätzliche Kalender-Tabelle in Betracht ziehen?] (http://sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliiary-calendar-table.html) – onedaywhen
Danke für den Link, ich denke, die beste Praxis ist, eine separate Tabelle so zu haben Ich werde damit gehen. – steve8918