【发布时间】:2023-02-17 00:33:11
【问题描述】:
我正在尝试创建一个滞后函数来返回艺术家当前月份和上个月的流。
我没有返回 2 月与 1 月的流,而是希望函数使用最近 30 天作为当月的期间,而前 30 天作为上个月的期间。
我目前使用的查询是这样的:
SELECT
DATEPART(month, date) AS month,
artist,
SUM([Streams]) AS streams,
LAG(SUM([Streams])) OVER (PARTITION BY artist ORDER BY DATEPART(month, date)) AS previous_month_streams
FROM combined_artist
WHERE date > DATEADD(m, -2, DATEADD(DAY, 2 - DATEPART(WEEKDAY, GETDATE()-7), CAST(GETDATE()-7 AS DATE)))
GROUP BY DATEPART(month, date), artist;
虽然这有效,但它没有提供我需要的数据。这将返回 2 月的流与 1 月的流的总和。 2 月份似乎很低,因为我们在 2 月份只有一周的数据。
我的目标是使用滞后函数从表中的最大日期获取最近 30 天。因此,如果最大日期是 2023 年 2 月 7 日,我希望当前月份包含 2023 年 1 月 7 日至 2023 年 2 月 7 日的数据,而上个月包含 2022 年 12 月 7 日至 2023 年 1 月 7 日的数据。我是考虑创建一个自定义月份日期部分,该部分将从最大日期开始,并为最后 30 天提供月份编号。 (1 月 7 日至 2 月 7 日 2 个,12 月 7 日至 1 月 7 日 1 个...)我不知道该怎么做。这是在 SQL Server 中,出于性能原因,我希望使用滞后函数。
【问题讨论】:
标签: sql sql-server performance date lag