[MSsql] 如何查询近30天的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[MSsql] 如何查询近30天的数据相关的知识,希望对你有一定的参考价值。

rt

DATEADD (datepart ,number,date)函数 在日期中添加或减去指定的时间间隔。datepart指的是时间的那一部分,比如年number指的是时间间隔,可以用负值date指的是从那个日期开始添加或减去时间间隔
select dateadd(day,-30,getdate())
参考技术A Select * From 表 where datediff(d,要比较的时间,getdate()) > 30 参考技术B Select * From 表 Where 日期 >=GetDate()-30

oracle求查询连续三天的数据

select ids,reptype,YESTERDAYWORKINGTIME,WORKDATE from TMS_YJ_DayH

求reptype别WORKDATE连续三天,YESTERDAYWORKINGTIME>2的数据,例如:DX150LC-CH10,11月14,11月15,11月16,YESTERDAYWORKINGTIME都大于2,那么就显示连续三天中WORKDATE最大的一条数据,明细显示3条;连续4天的话,显示连续4天中WORKDATE最大的一条数据,明细显示最大的3条;连续天数<3的数据不显示
假如:11月11,11月12,11月13,11月20,11月21,11月22都超了2小时如果查询条件是11月10到11月15日那么主表显示11月13,子表显示11月11,11月12,11月13,如果查询条件是11月10到11月30日那么主表显示11月22,子表显示11月20,11月21,11月22

问一下:是要找连续三天最大的,还是最大的数据是连续三天的?如果是最大的数据连续三天的
思路这样,查询所有reptype最大的那三条WORKDATE信息,并且YESTERDAYWORKINGTIME>2,然后将这三条数据中max(WORKDATE)-MIN(WORKDATE)=2的reptype的数据打印出来。
需要嵌套查询。
如果是连续三天的数据中最大的那三条思路要变一下。追问

假如:11月11,11月12,11月13,11月20,11月21,11月22都超了2小时
如果查询条件是11月10到11月15日那么主表显示11月13,子表显示11月11,11月12,11月13,如果查询条件是11月10到11月30日那么主表显示11月22,子表显示11月20,11月21,11月22

追答

OK,要是取主表和子表,可以把下面的SQL改一下就可以了,假设表名为WKTIME:
Select b.reptype, b.workdate,b.* From (Select d.* ,rownum rn From (Select * From wktime where YESTERDAYWORKINGTIME >= 2 order by reptype, workdate desc) d) b, (Select z.reptype,max(z.tpdate) tpdate from (Select distinct a.reptype, a.workdate + rownum tpdate From (Select * From wktime where YESTERDAYWORKINGTIME >= 2 order by reptype, workdate desc) a group by a.reptype, a.workdate + rownum having count(a.workdate + rownum) >= 3) z group by z.reptype )c where b.workdate + b.rn = c.tpdate
and b.reptype = c.reptype;
基本的原理就是把所有YESTERDAYWORKINGTIME >2的数据查询出来,然后按照日期从大到小排一个序,排序完成之后我们使用workdate + rownum进行一下分组,如果按照reptype,workdate + rownum这两列的分组中,count值大于3的,就说明这三天的数据是连续的。
找出连续的三天之后就好处理了,想要那个数据就用这个结果和原来的表进行条件运算就可以了。

追问

workdate + rownum的意义是什么,我这里不太明白

追答

数据被逆序排序之后,会从大到小的排列,ROWNUM是排序的行号。举例如下:
workdate rownum +之后结果
2013/12/26 3 2013/12/292013/12/27 2 2013/12/292013/12/28 1 2013/12/292013/12/20 11 2013/12/312013/12/21 10 2013/12/312013/12/22 9 2013/12/31

如果是连续的那么workdate + rownum的值是相同的,如果workdate + rownum相同的值出现了三次,说明有三天是连续的,如果出现了多次,就说明多天连续。

参考技术A fdeg烦得很 参考技术B reptype需要一致,才能算作workdate连续工作嘛?还是只要表中的workdate连续就可以了?还有你说的明细是什么?明细最大是怎么判断的?追问

reptype需要一致,分上下两个表上面显示连续三天最大的一条,下面显示具体的三条信息

以上是关于[MSsql] 如何查询近30天的数据的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode:Database 56.查询近30天活跃用户数

mysql近几天的查询

获取近30天的数据的时间方式

php统计近一周和近30天的用户数据

mysql查询近30天

LINQ 查询以获取过去 30 天的记录