这里主要使用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日。