Mysql中计算表中日期距离当前日期有几个月的数据个数并横向展示

本文介绍了一种使用MySQL的TIMESTAMPDIFF()函数结合IF函数来计算表中日期距离当前日期不同时间段的数据个数的方法,并通过示例展示了如何将这些数据横向展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mysql中计算表中日期距离当前日期有几个月的数据个数并横向展示


面试中遇到的问题,一张表,tdate 为DATE格式 要求根据表一的数据编写sql得到表二的形式

表一
在这里插入图片描述

表二在这里插入图片描述
主要用到mysql中过的TIMESTAMPDIFF()函数和if函数 下面是完整的sql

SELECT  t.state, SUM(IF(t.monthnum=0,
			 1,
 0 
		)
	) AS '距离当前时间不到一个月', SUM(IF(t.monthnum=1,
			1,
 0 
		)
	) AS '距离当前时间一个月', SUM(IF(t.monthnum=2,
		 1,
 0 
		)
	) AS '距离当前时间两个月', SUM(IF(t.monthnum>=3,
		 1,
 0 
		)
	) AS '距离当前时间三个月及以上'
FROM (
SELECT state, TIMESTAMPDIFF(MONTH,tdate, NOW()) AS monthnum
FROM test_date
WHERE state = 1 AND tdate < NOW() UNION ALL
SELECT state, TIMESTAMPDIFF(MONTH,tdate, NOW()) AS monthnum
FROM test_date
WHERE state = 2 AND tdate < NOW()) t
GROUP BY (t.state);

if 函数
IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,
因为要计数所以sql中expr2 给值1 每次累加一

TimeStampDiff()函数
是MySQL本身提供的可以计算两个时间间隔的函数,语法为:
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。其中unit单位有如下几种,分别是:FRAC_SECOND (microseconds), SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR 。该参数具体释义如下:
FRAC_SECOND 表示间隔是毫秒
SECOND 秒
MINUTE 分钟
HOUR 小时
DAY 天
WEEK 星期
MONTH 月
QUARTER 季度
YEAR 年

面试回来之后写的 当时没有答上来,感觉这么写效率会很低 有更好的方案的话 欢迎指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值