select * from ShopOrder where datediff(day,ordTime,getdate()-1)=0 //查询当天的所有数据
--查询当天:
select * from info where DateDiff(dd,datetime,getdate())=0
--查询24小时内的:
select * from info where DateDiff(hh,datetime,getDate())<=24
--info为表名,datetime为数据库中的字段值
--查询当天:
select * from info where DateDiff(dd,datetime,getdate())=0
--查询24小时内的:
select * from info where DateDiff(hh,datetime,getDate())<=24
--info为表名,datetime为数据库中的字段值
按照你给的说法和例子( 1号3条数据,2号没有数据,3号2条数据,),那么所谓的一次两天,应该是取出1号和3号的5条数据,是这个意思吧。假设4,5号都有数据,那么现在是(1有数据,2没数据,3有数据,4有数据,5有数据)其他不算,就说这五天
那么你说的一次取出两天的数据怎么取?从后往前,还是从前往后,亦或是随便取?还是多次取,每两天的都取出来?给的需求并不是十分明确。
个人认为最大的可能是从后往前,或者某一个时间段往前或者往后。
如果是数据块的话很好写,定义两个变量,两个初始都是0,我们假设为a,b,a代表有数据天数,b代表天数。输入当前日期(查询日期),然后在表内对当前日期进行count计数,如果计数不为0,那么a=a+1,b=b±1(根据向前还是向后查询自己分配),如果计数为0,那么只b±1,然后判断一下a是否等于2,如果a不等于2,那么继续循环,直到循环出现两个计数不为0的天,那么a=2了,然后就能退出循环,这是查询出的内容就是两天的。
如果是单条sql的话,考虑到查询的当天可能也没有数据,比如你要查询2号(包含)往后的两天(一般来说是2号和3号的数据),但是2号没有数据,所以输出的应该是3号和4号的数据。
单独的sql好像能写出来,我说一个思路,开窗函数,你对找出来的数据,比如大于等于2号的数据进行排序,这个排序是开窗(oracle的话这里用rank,其他数据不知道),其他数据库不知道)的排序,(不分组,按照日期的截取到日去排序,也就是不算具体的时间,而是1号,2号,这样的排序)这时,3号的所有数据会被标记为1,4号的所有数据被标记为2,然后再截取排序号小于等于2的就可以了。
其他的还有,不过要么是计数,要么是开窗排序,而且不一定能写出来,或者就算写出来了,可能也比较耗费资源,估计可用性不大。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)