MsSQL   发布时间:2022-05-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了有趣的SQL加入日期之间的日期大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
首先,感谢任何帮助我解决这个问题的人.我正在使用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 datetiR_658_11845@E NOT NULL)
DECLARE @date datetiR_658_11845@E,@max_date datetiR_658_11845@E

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

根据您的潜在日期范围有多大,填写表变量可能需要一些时间.例如,如果范围跨越十或二.

大佬总结

以上是大佬教程为你收集整理的有趣的SQL加入日期之间的日期全部内容,希望文章能够帮你解决有趣的SQL加入日期之间的日期所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:首先