【问题标题】:Extract only dates for first Day of Month from a daily Date Dimension Table without nesting从每日日期维度表中仅提取每月第一天的日期而不进行嵌套
【发布时间】:2019-02-28 08:03:26
【问题描述】:

我正在使用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]

输出如下:

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

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

【问题讨论】:

  • 可能是我搞错了,但你提供的代码对我来说没有多大意义......只是WHERE DAY([date])=1

标签: sql sql-server tsql date group-by


【解决方案1】:

只要重复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)

PS:这个:

DATEADD(month, DATEDIFF(month, 0, [date]), 0)

可以写成:

DATEADD(DAY, 1, EOMONTH([date], -1))

【讨论】:

    【解决方案2】:

    我们不能只写一个独特的,

    SELECT DISTINCT DATEADD(month, DATEDIFF(month, 0, [date]), 0) AS [Date2]
    FROM DateDimension
    where [date] between '2018-07-01' and '2019-06-01'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      相关资源
      最近更新 更多