现在的位置: 首页 > 综合 > 正文

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

2013年09月20日 ⁄ 综合 ⁄ 共 1021字 ⁄ 字号 评论关闭
文章目录

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

本月记录查询

首先我们需要限定月份和当前月份相等,如下所示:
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());

查询结果:

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

抱歉!评论已关闭.