我们就用例子来说明吧,一个消费记录表,这里面的记录的是用户的消费记录,这个时候有个要求,用户想知道从一个时间到另一个时间的消费记录,中间有的日期没有消费的也得出来,只不过数据都是0(当然我们项目中有这个要求啦^^),当拿到这个需求的时候一下子感觉无从下手了,因为我们平成的查询都是SELECT 数据 FROM DUAL WHERE 条件 这个时候符合条件也只是一条数据啊,如果是一个空表根本就查不到数据,这也是无从下手的原因,今天在群里问了一下,得到高手指点用CONNENT BY 来解决这个问题,于是做了一个例子作为记录,以后在遇到这样的问题就会了:
SELECT 开始时间+ROWNUM-1 FROM DUAL CONNECT BY ROWNUM < 结束时间 - 开始时间
今天用到了sql server 2008的类似上面的情况,于是把自己写出来的sql在这里保存一下,省得以后忘记了:
with t (createtime,num)as
(select GETDATE() createtime ,10 num
union all
select t.createtime-1,t.num-1 from (select GETDATE() createtime ,10 num) tem,t
where t.createtime-1 > tem.createtime - tem.num
)
select * from t
sql server 不像Oracle那么方便,还的自己构造,如果原来的表中有多条数据,那么这个递归出来的结果就不是我们想要的了,如:
with t (createtime,num)as
(select GETDATE() createtime ,10 num
union all
select GETDATE()-5 createtime ,5 num
union all
select t.createtime-1,t.num-1 from (select GETDATE() createtime ,10 num) tem,t
where t.createtime-1 > tem.createtime - tem.num
)
select * from t
目前还没有想出解决方案,自己也在测试中,先把这些记下来,以免以后再次用的时候还的去想,程序就是这样,一段时间不用很容易忘记的。