【问题标题】:Get SQL results from another query that has many results and count how many results从另一个有很多结果的查询中获取 SQL 结果并计算有多少结果
【发布时间】:2022-09-30 23:01:07
【问题描述】:

我有一个包含IDSDate 列的数据库表。我需要知道是否有一定数量的行(从另一个表中预先确定的数量)符合在较大跨度范围内每周之间的标准。可以说 \'2021-11-29\' 和 \'2022-03-01\' (在这种情况下为 12 周)。所以结果看起来像这样。

我正在使用此代码获取DayStartDayEnd

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)

任何帮助将不胜感激

  • 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或键入问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
  • 请显示将产生您想要的结果的示例数据。

标签: sql sql-server


【解决方案1】:

如果我正确理解您的问题,如果您已经设置了@STARTDATE 和@ENDDATE,您可以执行以下操作:

SELECT SUM(CASE WHEN Date BETWEEN @STARTDATE AND @ENDDATE THEN 1 ELSE 0) END AS RowCount

这应该返回该表中在您传递到开始日期和结束日期的日期范围之间的行数。

【讨论】:

    【解决方案2】:

    我选择使用上面的 CTE 表来获取我正在寻找的日期范围,将它们与我需要从数据中提取的详细信息交叉连接,然后我使用 Count 和左连接将它们放在一起放在一张整洁的桌子上。

    最初我在使用交叉连接时遇到了麻烦,因为它只会显示超过 0 行的日期范围。因为如果它有 0 行,就没有什么可以交叉连接的。 Left Join 成功了。我只需要离开加入范围,例如date>= DayStart 和 date<= DayEnd

    【讨论】:

      猜你喜欢
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多