Извлечение только дат первого дня месяца из ежедневной таблицы измерений дат без вложенности - PullRequest
0 голосов
/ 28 февраля 2019

Я использую 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 - это таблица с ежедневными датами.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Разве мы не можем просто написать это с отличным

SELECT DISTINCT DATEADD(month, DATEDIFF(month, 0, [date]), 0) AS [Date2]
FROM DateDimension
where [date] between '2018-07-01' and '2019-06-01'
0 голосов
/ 28 февраля 2019

Просто повторите часть вычисления даты внутри 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))
...