在没有嵌套的情况下,从每日日期维度表中仅提取第一天的日期

use*_*933 0 sql t-sql sql-server group-by date

我正在使用SQL Server 2014,我有以下T-SQL查询,它从Date Dimension表中检索每月第一天的日期(基于我的过滤器):

SELECT * FROM (
    SELECT DATEADD(month, DATEDIFF(month, 0, [date]), 0) AS [Date2]
    FROM DateDimension
    WHERE [date] BETWEEN '2018-07-01' AND '2019-06-01'
) x
GROUP BY x.[Date2]
Run Code Online (Sandbox Code Playgroud)

输出如下:

Date2
2018-07-01 00:00:00.000
2018-08-01 00:00:00.000
2018-09-01 00:00:00.000
2018-10-01 00:00:00.000
2018-11-01 00:00:00.000
2018-12-01 00:00:00.000
2019-01-01 00:00:00.000
2019-02-01 00:00:00.000
2019-03-01 00:00:00.000
2019-04-01 00:00:00.000
2019-05-01 00:00:00.000
2019-06-01 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

我使用嵌套查询来实现这一点.我的问题是我是否可以在不使用嵌套查询的情况下获得相同的结果.我的Date Dimension桌子是一张每日日期的桌子.

Sal*_*n A 5

只需重复里面的日期计算部分GROUP BY:

SELECT DATEADD(month, DATEDIFF(month, 0, [date]), 0) AS [Date2]
FROM DateDimension
WHERE [date] between '2018-07-01' and '2019-06-01'
GROUP BY DATEADD(month, DATEDIFF(month, 0, [date]), 0)
Run Code Online (Sandbox Code Playgroud)

PS:这个:

DATEADD(month, DATEDIFF(month, 0, [date]), 0)
Run Code Online (Sandbox Code Playgroud)

可以写成:

DATEADD(DAY, 1, EOMONTH([date], -1))
Run Code Online (Sandbox Code Playgroud)