有趣的SQL加入日期之间的日期
发布时间:2020-12-12 16:35:30 所属栏目:MsSql教程 来源:网络整理
导读:首先,感谢任何帮助我解决这个问题的人.我正在使用SQL 2005,但如果05中没有可用的解决方案,可以使用2008. 我有一排数据看起来像这样: select * from mySPtable| myPK | Area | RequestType | StartDate | EndDate | 1 SB ADD 8/14/2011 8/18/2011 2 NB RMV 8/
首先,感谢任何帮助我解决这个问题的人.我正在使用SQL 2005,但如果05中没有可用的解决方案,可以使用2008.
我有一排数据看起来像这样: select * from mySPtable | myPK | Area | RequestType | StartDate | EndDate | 1 SB ADD 8/14/2011 8/18/2011 2 NB RMV 8/16/2011 8/16/2011 所以我想做的就是每天对每个区域的总请求数.结果应该是: | myDate | RequestType | Area | myCount | 8/14/2011 ADD SB 1 8/15/2011 ADD SB 1 8/16/2011 ADD SB 1 8/16/2011 RMV NB 1 8/17/2011 ADD SB 1 8/18/2011 ADD SB 1 我该怎么做呢?我被骗了,没有数量的谷歌搜索有帮助. 解决方法你需要一个日历表,或者你可以生成一个CTE.一旦你这样做,其余的查询应该是相当微不足道的. CTE方法可能有点复杂,由于递归问题,不允许使用聚合,所以下面我使用了一个表变量.您也可以将其保留在数据库中的永久表.SET NOCOUNT ON DECLARE @Calendar TABLE (my_date DATETIME NOT NULL) DECLARE @date DATETIME,@max_date DATETIME SELECT @date = MIN(StartDate),@max_date = MAX(EndDate) FROM My_Table WHILE (@date <= @max_date) BEGIN INSERT INTO @Calendar (my_date) VALUES (@date) SELECT @date = DATEADD(dy,1,@date) END SELECT C.myDate,M.RequestType,M.Area,COUNT(*) AS myCount FROM @Calendar C INNER JOIN My_Table M ON M.StartDate <= C.myDate AND M.EndDate >= C.myDate GROUP BY C.myDate,M.Area ORDER BY C.myDate,M.Area 根据您的潜在日期范围有多大,填写表变量可能需要一些时间.例如,如果范围跨越十或二. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |