Seite 1 von 1

Daten zwischen zwei Tagen filtern

Verfasst: Sonntag 4. Dezember 2016, 11:36
von Peter1977
Hallo,

Muss eine Datenbankabfrage jeden Tag machen die zwischen Uhrzeit 22 Uhr bis 6Uhr des nächsten Tages liegt

Wenn ich jetzt den 3 Tag im Monat abfrage so habe ich alle zwischen 22 und 0Uhr am 3.
und alles zwischen 0-6Uhr am 4. Tag geschrieben

der Jetzige SQL Code sieht so aus

[codebox=postgresql file=Unbenannt.sql]
SELECT
COUNT(arbeitsauftrag_id) AS Stk,
SUM(fertiggewicht) AS Gewicht,
SUM(zeit) AS Zeit,
EXTRACT(day FROM datum) AS Day
FROM arbeitsauftrag
WHERE
date_part('year',datum)='2016' AND date_part('month',datum)='11' AND
NOT (EXTRACT(Hour FROM datum)<22 AND EXTRACT(HOUR FROM datum)>=6)
AND abteilung='1'
GROUP BY Day
ORDER BY Day
[/code]

Im Moment stehe ich an wie die Abfrage umgeändert werden muss.

mfg Peter

Re: Daten zwischen zwei Tagen filtern

Verfasst: Sonntag 4. Dezember 2016, 16:08
von BlackJack
@Peter1977: Musst Du die Abfrage jeden Tag für den Folgetag machen, oder eine Abfrage die das Ergebnis für alle Tage liefert? Im Text sprichst Du vom 3. und 4. im Monat, in der SQL-Abfrage kommt der Tag dann aber gar nicht vor‽

Für einen Tag würde ich die Abfrage so schreiben:

Code: Alles auswählen

SELECT count(arbeitsauftrag.id) AS stk,
       sum(arbeitsauftrag.fertiggewicht) AS gewicht,
       sum(arbeitsauftrag.zeit) AS zeit 
FROM arbeitsauftrag 
WHERE arbeitsauftrag.abteilung = '1' AND arbeitsauftrag.datum BETWEEN ? AND ?
Und Start und Ende für die Platzhalter in Python berechnen.

Re: Daten zwischen zwei Tagen filtern

Verfasst: Sonntag 4. Dezember 2016, 17:09
von Hyperion
Alternativ kann man natürlich das zweite Datum aus dem ersten + einen Offset von 8 Stunden berechnen. Je nach SQL-Server kann dies unterschiedlich praktikabel sein. Somit bräuchte man nun noch einen Parameter übergeben.

Re: Daten zwischen zwei Tagen filtern

Verfasst: Sonntag 4. Dezember 2016, 17:16
von BlackJack
@Hyperion: Wobei man da dann darauf achten sollte das zweimal im Jahr die Zeitspanne zwischen 22 und 6 Uhr nicht 8 Stunden beträgt. Also in beiden Fällen muss man darauf achten, sowohl bei der Datenbank als auch wenn man die Grenzen in Python berechnet.

Re: Daten zwischen zwei Tagen filtern

Verfasst: Sonntag 4. Dezember 2016, 18:16
von Peter1977
Hallo,
@Peter1977: Musst Du die Abfrage jeden Tag für den Folgetag machen, oder eine Abfrage die das Ergebnis für alle Tage liefert? Im Text sprichst Du vom 3. und 4. im Monat, in der SQL-Abfrage kommt der Tag dann aber gar nicht vor‽
Ne das läuft dann über das ganze Monat

vom 1 bis 28-31 je nach monat
ergebnis sieht dan so au

Tag Stk Gewicht
1 1 543
2 3 120
3 2 500
4 1 125
5
6 3 200

Tag 3 läuft bei der oberen Abfrage von 22-6
Tag 4 ist ein Samstag
Tag 5 ein Sonntag
6 wieder ein Montag

alles nur zum Beispiel

das läuft in der Obigen Abfrage ja so das es am Tag 3 zuerst 0-6Uhr und dann 22-0Uhr genommen wird
Richtig wäre Tag 3 von 22-0Uhr und dann vom Folgetag vom 4. von 0-6Uhr dazugenommen wird.

mfg Peter

Re: Daten zwischen zwei Tagen filtern

Verfasst: Sonntag 4. Dezember 2016, 18:24
von Hyperion
@BlackJack: Stimmt. (Doofe Zeitumstellung :twisted: )

Dann ist es vermutlich besser, das Datum des nächsten Tages aus dem ersten zu berechnen und dort 6:00 Uhr fix zu setzen.

Re: Daten zwischen zwei Tagen filtern

Verfasst: Sonntag 4. Dezember 2016, 20:37
von BlackJack
@Peter1977: Ich würde wahrscheinlich einfach zwei Abfragen absetzen und die dann auf Clientseite zusammenrechnen.

Re: Daten zwischen zwei Tagen filtern

Verfasst: Montag 5. Dezember 2016, 19:00
von Peter1977
Hallo,
Ich würde wahrscheinlich einfach zwei Abfragen absetzen und die dann auf Clientseite zusammenrechnen.
Danke Gute Idee. Leicht umzusetzen. Klaue ich mir wenn ich darf.

mfg Peter