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

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

【SQL】查询一段时期内的交易流水记录_第1张图片

本月记录查询

首先我们需要限定月份和当前月份相等,如下所示:
SELECT * FROM timetest WHERE month(time)=(month(NOW()));
【SQL】查询一段时期内的交易流水记录_第2张图片
则会连同其它年份相同月份的记录一起查询。
所以,必须限定年份也和当前年份相等才可以。如下:
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)
查询结果:
【SQL】查询一段时期内的交易流水记录_第3张图片

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


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

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


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

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

【SQL】查询一段时期内的交易流水记录_第4张图片


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

#上个月 前三个月   十个月
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());

查询结果:

【SQL】查询一段时期内的交易流水记录_第5张图片【SQL】查询一段时期内的交易流水记录_第6张图片【SQL】查询一段时期内的交易流水记录_第7张图片

查询前几天的流水记录也可以用该方法。不再赘言。

你可能感兴趣的:(SQL)