MySQL 获取查询两日期之间的所有月份、天数、小时数(包含无数据的月份、天数、小时)

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

猜你喜欢

转载自www.cnblogs.com/nengka/p/10057923.html