GrazerTourer Geschrieben 27. November 2015 Teilen Geschrieben 27. November 2015 Hallo, Ich habe wieder einmal eine für mich recht komplizierte Abfrage für mySQL. Vereinfacht sieht meine Tabelle so aus (restliche Spalten ausgeblendet). Es gibt pro Minute einen Temperaturwert. datetime temp 01/08/2015 18:40 20.4 01/08/2015 18:41 20.4 01/08/2015 18:42 20.5 01/08/2015 18:43 20.5 01/08/2015 18:44 20.4 01/08/2015 18:45 20.4 01/08/2015 18:46 20.4 01/08/2015 18:47 20.4 01/08/2015 18:48 20.4 01/08/2015 18:49 20.4 01/08/2015 18:50 20.3 01/08/2015 18:51 20.3 01/08/2015 18:52 20.4 01/08/2015 18:53 20.4 01/08/2015 18:54 20.4 01/08/2015 18:55 20.4 01/08/2015 18:56 20.4 01/08/2015 18:57 20.4 01/08/2015 18:58 20.4 01/08/2015 18:59 20.4 01/08/2015 19:00 20.2 01/08/2015 19:01 20.2 01/08/2015 19:02 20.1 01/08/2015 19:03 20.1 01/08/2015 19:04 20.1 01/08/2015 19:05 20.1 Ich möchte nun Tropennächte berechnen. Eine Tropennacht ist es dann, wenn es zwischen 18:00 und 06:00 Uhr nie =20. Die Zuordnung ist immer das Datum nach 0:00Uhr! Das heißt: Wenn es In der Nacht von 01. auf den 02. zwischen 18:00Uhr (am 01.) und 06.00Uhr (am 02.) nie unter 20°C hat, muss als Ergebnis der 02. ausgespuckt werden. -> Am 02. gab es eine Tropennacht. Wie mache ich die Abfrage denn? Ich kann natürlich leicht abfragen, ob es zwischen 18:00 und 00:00 Uhr immer >=20°C hat und das Gleiche für 00:00-06:00 Uhr, aber diese Zeilen haben dann ein anderes Datum und ich tu mir schwer die zu verheiraten. Hmmm. Danke herzlichst! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MTB-Pirate Geschrieben 27. November 2015 Teilen Geschrieben 27. November 2015 ich habs mal auf einer Oracle Datenbank probiert, aber SQL Befehle unterscheiden sich ja nur in Details. select to_char(datetime+6/24), min(temp) from TABELLE_XX where to_number(to_char(datetime+6/24,'hh24')) group by to_char(datetime+6/24) liefert dir eine Liste mit Tagesdatum + die jeweilige Minimale Temp in deinem gewünschten Zeitraum. Rest sollte dann einfach sein. Der Trick dabei ist einfach die Zeit um 6 Stunden nach vorne zu schieben. Dann kann ich einfach sagen ich will nur die Ziet bis 12 Uhr. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mafe Geschrieben 27. November 2015 Teilen Geschrieben 27. November 2015 SQL-Server mit Subselect: Select distinct convert(varchar(20), datum,4) as datum, case when ( Select min(temp) from Table_1 innerTable where innerTable.datum between convert(datetime, convert(varchar(20), dateadd(dd,-1,outerTable.datum),4) + ' 18:00') and convert(datetime, convert(varchar(20), outerTable.datum,4) + ' 06:00') ) else 'Tropennacht' end as Tropennacht from table_1 outerTable order by datum Alternativ kannst natürlich auch eine Funktion schreiben und das Datum mit reingeben und die Rückgabe auswerten. Performancetechnisch ist allerdings beides etwas problematisch. lg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
NoDoc Geschrieben 27. November 2015 Teilen Geschrieben 27. November 2015 mein Beitrag dazu: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
GrazerTourer Geschrieben 27. November 2015 Autor Teilen Geschrieben 27. November 2015 Danke euch! Ich habe mir einmal den Vorschlag von MTB-Pirate angeschaut - klappt, mit ein paar ANpassungen super! Wenn ich das Query für mySQL ändere auf: select DATE_FORMAT((datetime + INTERVAL 6 HOUR),'%Y-%m-%d'), min(temp) from wettertabelle where convert(DATE_FORMAT(datetime + INTERVAL 6 HOUR,'%H'), SIGNED INTEGER) group by DATE_FORMAT((datetime + INTERVAL 6 HOUR),'%Y-%m-%d') having min(temp)>=20 bekomme ich eine feine Liste: DATE_FORMAT((datetime+6/24),'%Y-%m-%d') min(temp) 2015-07-07 21.3 2015-07-20 20.9 2015-07-21 20.4 2015-07-22 20.4 2015-07-23 20.2 2015-08-05 20.0 2015-08-06 20.6 2015-08-07 21.6 2015-08-08 21.5 2015-08-09 20.6 2015-08-11 20.9 2015-08-12 21.9 2015-08-13 22.8 2015-08-14 20.7 2015-08-15 20.2 2015-08-29 20.0 Ich habe jetzt testweise am 06.07.2015 um 18:01 Uhr die Temperatur auf 19.0 gesetzt, um zu testen ob die Zeile rausfliegt. Haut hin! DANKE! @NoDoc YEAH! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.