【SQL】查询一段时期内的交易流水记录

对于如下一张交易流水的样表,我们如何去筛选一段时期内(本月,上个月,前三个月。。。)的交易流水记录呢?


本月记录查询

首先我们需要限定月份和当前月份相等,如下所示:
SELECT * FROM timetest WHERE month(time)=(month(NOW()));

则会连同其它年份相同月份的记录一起查询。
所以,必须限定年份也和当前年份相等才可以。如下:
SELECT * FROM timetest WHERE year(time)=year(NOW()) and month(time)=(month(NOW()));


前几个月记录查询

假若查询的是前三个月的交易流水,结合date_sub()函数,很容易写出如下代码:
select *  from timetest where year(time)=year(NOW()) and month(time)!=month(NOW()) and time>=date_sub(now(),INTERVAL 3 month)
查询结果:

可以看出,查询结果是正确的。


但是,此查询办法却有一个bug,即假如当前月份为二月份,则用该查询查前三个月的交易流水显而易见是错误的。

解决办法当然可以是加个判断,但却不利于推广使用。


更好的办法即是使用between 函数:

SELECT * FROM timetest WHERE month(time)!=month(NOW()) and (time BETWEEN (date_sub(NOW(),interval 3 month)) and NOW());
查询结果:



至此,我们可以很方便的查询前任意几个月的交易流水:

#上个月 前三个月   十个月
SELECT * FROM timetest WHERE month(time)!=month(NOW()) and (time BETWEEN (date_sub(NOW(),interval 1 month)) and NOW());
SELECT * FROM timetest WHERE month(time)!=month(NOW()) and (time BETWEEN (date_sub(NOW(),interval 3 month)) and NOW());
SELECT * FROM timetest WHERE month(time)!=month(NOW()) and (time BETWEEN (date_sub(NOW(),interval 10 month)) and NOW());

查询结果:


查询前几天的流水记录也可以用该方法。不再赘言。
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值