查询某一时间段内数据_浅谈如何查询仅在某个时间段内的数据

最近遇到这样的一个需求:有一组数据,这组数据有一个字段叫支付时间,现在要筛选出这些数据中最近三个月有过支付情况,且三个月前无支付情况的记录。

首先观察下数据集字段,经过处理后,保留了5个字段,其中当前时间是原表没有的,统一用12月1日作为当前时间,增加这个字段的目的是用当前时间减去支付时间,得出时间差。

e70b0775741235b1811f5847bbc688a3.png

了解完数据集基本情况后,接下来就要回到需求,如何查询出有且仅有近三个月支付记录的编码。上一步我增加字段已经考虑到,计算出时间差,用timestampdiff函数,时间差=timestampdiff(month,支付时间,当前时间),再筛选时间差小于等于3的记录,得到的结果就是有且仅有近三个月支付的记录,代码如下:

“select * from (

select*,timestampdiff(month,支付时间,当前时间) 时间差 from table1)a

where 时间差 <=3;”

这个结果是对的吗?以上代码查询出的结果是不对的,这段代码只是查询出近三个月有支付的记录,并没有排除三个月前有支付的情况,所以查询出的结果是不对的。

怎么办呢?当时我想了一小会,这个需求从正面来实现是比较难的,那能不能从另一面来突破。思路不复杂,先查询出三个月前有支付的记录,再用总的记录匹配出三个月前有支付的记录,剩下未匹配到的就是仅有近三个月支付记录的编码,只需把上面的代码改个符合即可:

“select * from (

 select*,timestampdiff(month,支付时间,当前时间) 时间差 from table1)a

where 时间差 >3;”

最后用匹配后的结果进行验证,思路是正确的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值