首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅从每日日期维度表中提取每月第一天的日期,而不嵌套

仅从每日日期维度表中提取每月第一天的日期,而不嵌套
EN

Stack Overflow用户
提问于 2019-02-28 16:03:26
回答 2查看 89关注 0票数 0

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

代码语言:javascript
复制
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]

输出如下:

代码语言:javascript
复制
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表是一个包含每天日期的表。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-28 16:09:19

只需在GROUP BY中重复日期计算部分

代码语言:javascript
复制
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:这是:

代码语言:javascript
复制
DATEADD(month, DATEDIFF(month, 0, [date]), 0)

可以写成:

代码语言:javascript
复制
DATEADD(DAY, 1, EOMONTH([date], -1))
票数 5
EN

Stack Overflow用户

发布于 2019-02-28 16:15:29

我们就不能用一个不同的,

代码语言:javascript
复制
SELECT DISTINCT DATEADD(month, DATEDIFF(month, 0, [date]), 0) AS [Date2]
FROM DateDimension
where [date] between '2018-07-01' and '2019-06-01'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54920952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档