我有一个包含列IDS
和Date
的数据库表。我需要知道是否有一定数量的行(从另一个表中预先确定的数量)满足在较大跨度范围内的每周之间的标准。假设是‘2021-11-29’和‘2022-03-01’(在这种情况下是12周)。所以结果会是这样的。
我使用此代码来获取DayStart
和DayEnd
:
declare @STARTDATE date;
declare @ENDDATE date;
set @STARTDATE = '2021-11-29';
set @ENDDATE = '2022-03-01';
with Nums as
(
select 1 as NN
union all
select NN + 1 as NN
from Nums
where NN < 1000
)
select
dateadd(dd, NN, @STARTDATE) as DayStart,
dateadd(dd, NN + 6, @STARTDATE) as DayEnd
from
Nums
where
dateadd(dd, NN + 6, @STARTDATE) <= @ENDDATE
and datepart(dw, dateadd(dd, NN, @STARTDATE)) = 1
option (maxrecursion 0)
如有任何帮助,将不胜感激
2条答案
按热度按时间flseospp1#
如果我正确理解了您的问题,如果您已经设置了@STARTDATE和@ENDDATE,则可以执行以下操作:
它应该返回表中介于您传入开始日期和结束日期的日期范围之间的行数。
bis0qfac2#
我选择使用类似上面的CTE表来获得我正在寻找的日期范围,将它们与我需要从数据中提取的细节交叉连接,然后我使用COUNT和LEFT JOIN将它们放在一个整齐的表中。
最初,我在使用交叉联接时遇到了麻烦,因为它只显示超过0行的日期范围。因为如果它有0行,就没有什么可以交叉连接到的。Left Join做到了这一点。我只需要在范围内保持连接,例如DATE>=DAYSTART和DATE<=DAYEND