2016-04-22 4 views
0

haben durch diese Website (und andere) ausführlich gesucht, um zu versuchen und den besten Weg einzuschränken, um eine SQL-Abfrage zu erreichen, die eine Reihe von zeitgestempelten Daten zurückgibt gestern in einem 8 Stunden Schichtfenster. Einige Herausforderungen bestehen darin, dass dies in einem proprietären Datenvisualisierungstool (DG-LOGIK) programmiert wird, das einen JDBC-Konnektor zur SQL-Datenbank verwendet, so dass einige der Standard-Datetime-Funktionen nicht erkannt werden.SQL-Abfrage, um Ergebnisse auf gestern und einen bestimmten 8-Stunden-Zeitraum zu begrenzen

Die Abfrage, die ich erfolgreich an der Arbeit bekommen haben ist:

SELECT MAX(TimeOfSample) as TimeOfSample, SUM(SampleValue) as SampleValue FROM {trend_log} 
WHERE TimeOfSample >= GETDATE()-1 AND (DATEPART(HOUR,TimeOfSample)>=07 AND DATEPART(HOUR,TimeOfSample)<=15) 
GROUP BY 
DATEPART(YEAR, TimeOfSample), 
DATEPART(MONTH, TimeOfSample), 
DATEPART(DAY, TimeOfSample), 
DATEPART(HOUR,TimeOfSample), 
(DATEPART(MINUTE,TImeOfSample)/15) 
ORDER BY TimeOfSample 

Herausforderung: Wenn Sie innerhalb der heutigen Zeit der Verschiebung ist heute und gestern Ergebnisse zurück. Ich habe versucht, TimeOfSample = GETDATE()-1 zu begrenzen, aber ich bekomme eine Fehlerrückkehr auf dem gleichen Vergleich. Wie kann ich diese Abfrage beschränken, um nur gestern zurückzukehren?

Antwort

1

Ich denke, das ist die where Klausel Sie wollen:

WHERE TimeOfSample >= CAST(GETDATE()-1 as date) AND 
     TimeOfSample < CAST(GETDATE() as date) AND 
     (DATEPART(HOUR,TimeOfSample) >= 07 AND DATEPART(HOUR, TimeOfSample) <= 15) 

Sie müssen die unteren und oberen Grenzen von gestern spezifizieren.

Verwandte Themen