如何根据条件按结果集从组中获取数据?

时间:2021-03-03 18:02:51

标签: sql sql-server group-by

我正在按年份和月份分组获取 2 个日期之间的数据。现在出于调试目的,我想从特定月份的组结果中获取检查数据,但我不知道该怎么做。

查询:

SELECT CAST(MONTH(ActiveDate) AS VARCHAR(2)) + '-' + CAST(YEAR(ActiveDate) AS VARCHAR(4)) AS MyDate, 
    Count(*) AS Stats 
FROM JobListings
where CompanyID = 100
and Status = 'Active'
and (ActiveDate >= '9/1/2020' 
and ActiveDate <= '2/28/2021')
GROUP BY CAST(MONTH(ActiveDate) AS VARCHAR(2)) + '-' + CAST(YEAR(ActiveDate) AS VARCHAR(4))

这给了我如下结果:

MyDate       Stats
10-2020      3
11-2020      15
12 - 2020    4
and so on.

现在我想要的是获取“10-2020”的实际 3 条记录,那么如何注入父查询以从特定月份和年份的组结果集中获取实际数据?

2 个答案:

答案 0 :(得分:1)

通过这个查询,这应该只返回 3 条记录:

SELECT *
FROM JobListings
where 
    CompanyID = 100
    and Status = 'Active'
    and ActiveDate >= '10/01/2020' 
    and ActiveDate <= '11/01/2020'

好吧,我在这里添加而不是评论,试试这个,看看它返回什么:

select * 
, CAST(MONTH(ActiveDate) AS VARCHAR(2)) + '-' + CAST(YEAR(ActiveDate) AS VARCHAR(4)) Mydate
from JobListings
where CAST(MONTH(ActiveDate) AS VARCHAR(2)) + '-' + CAST(YEAR(ActiveDate) AS VARCHAR(4)) = '10-2020'

答案 1 :(得分:1)

这里需要一个窗口聚合,而不需要 GROUP BY

另外,我建议您使用 EOMONTH 而不是像您那样拆分日期和投射。

SELECT
    EOMONTH(ActiveDate),
    Count(*) OVER (PARTITION BY EOMONTH(ActiveDate) AS Stats,
    *
FROM JobListings
where 
    CompanyID = 100
    and Status = 'Active'
    and (ActiveDate >= '9/1/2020' 
    and ActiveDate <= '2/28/2021')
相关问题