2016-04-07 8 views
0

Benötigen Sie Hilfe, wie Sie depth_md_msl von der letzten end_datetime des Tages erhalten.So erhalten Sie Daten am Ende der Stunde des Tages

Zum Beispiel dieses Datum:

2014-10-15 last depth_md_msl is 41.98 or 

2014-10-16 last depth_md_msl of the day is 109.98 

wenn ich die folgenden Abfrage zurückgeben nichts und seine völlig leer

SELECT depth_md_msl 
FROM fa 
WHERE fa.start_datetime >= CURDATE() - INTERVAL 1 DAY 



end_datetime   depth_md_msl 
------------------- -------------- 

2014-10-15 08:00:00   41.98 
2014-10-15 08:00:00   (NULL) 
2014-10-15 10:00:00   (NULL) 
2014-10-15 10:00:00   41.98 
2014-10-15 10:30:00   41.98 
2014-10-15 10:30:00   (NULL) 
2014-10-15 12:00:00   41.98 
2014-10-15 12:00:00   (NULL) 
2014-10-15 17:00:00   41.98 
2014-10-15 17:00:00   (NULL) 
2014-10-15 23:00:00   41.98 
2014-10-15 23:45:00   41.98 
2014-10-15 23:59:59   41.98 
2014-10-16 00:30:00   41.98 
2014-10-16 03:15:00   41.98 
2014-10-16 12:00:00   106.98 
2014-10-16 12:30:00   106.98 
2014-10-16 14:00:00   109.98 
2014-10-16 15:00:00   109.98 
2014-10-16 19:00:00   109.98 
2014-10-16 23:59:59   109.98 
2014-10-17 06:00:00   109.98 
2014-10-17 08:00:00   109.98 
2014-10-17 15:30:00   109.98 
2014-10-17 19:30:00   109.98 
2014-10-17 23:59:59   109.98 

Antwort

1

Ich denke, dass Sie die Tabelle mit sich selbst verbinden müssen.

SELECT A.end_datetime, A.depth_md_msl FROM fact_activity AS A 
    JOIN (
     SELECT DATE(end_datetime) d, MAX(TIME(end_datetime)) t FROM fact_activity 
     GROUP BY 1 
    ) B ON 
    DATE(A.end_datetime) = B.d AND 
    TIME(A.end_datetime) = B.t 
+0

Es gibt Fehler in dem SQLyog Fehlercode: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige Syntax entspricht in der Nähe von 't FROM fact_activity GROUP BY 1 ) B ON DATUM (A.end_datetime)' bei Zeile 3 –

+0

Ich denke, es ist, weil ich eine schließende Klammern vergessen nach der Zeit. –

+0

Ich testete auf meinem lokalen und es sieht gut aus. –

0
SELECT x.* 
    FROM fa x 
    JOIN (SELECT MAX(end_datetime) max_end_datetime FROM fa GROUP BY DATE(end_datetime)) y 
    ON y.max_end_datetime = x.end_datetime; 
Verwandte Themen