這里主要使用left join,將所有日期放在左邊列出,然后再根據日期時間匹配貼上數據。
示例:獲取10月份的所有日期;
select r1.Idxdate,max(t2.val) from (SELECT @num :=@num + 1 AS Idx, date_format( adddate( '2018-09-30', INTERVAL @num DAY ), '%Y-%m-%d' ) AS Idxdate FROM station_0.tyc_10000, (SELECT @num := 0) t WHERE adddate( '2018-09-30', INTERVAL @num DAY ) < date_format('2018-10-31', '%Y-%m-%d')) r1 left join dbo.table2 t2 on r1.Idxdate = DATE_FORMAT(t2.datetime,'%Y-%m-%d') group by r1.Idxdate
運行結果:
同理,可以查詢月份、或小時、分鍾等;
但,一定要注意、一定要注意、一定要注意
數據表中的數據記錄總條數一定要大於查詢結果的記錄條數;
什么意思呢?
例如上圖查詢一個月中的每一天的最大數據值,10月有31天,如果該數據表總的歷史記錄只有20條(沒超過31條),那么你執行該語句查詢的結果最多也只有20條,即從10月1日到10月20日。