我在包含每周日期的表中有一組日期。
我想選擇以下內容:
如果日期不到2 個月,那么我想選擇所有日期(每周)。
如果日期超過2 個月,那么我只想選擇每個月的最后一個日期(每月)。
我嘗試了以下代碼:
SELECT DISTINCT(Date) FROM [Table] WHERE Date IN
(CASE
WHEN Date> DATEADD(month, -2, GETDATE())
THEN Date
ELSE MAX(Date) GROUP BY Month(Date),Year(Date)
);
但沒有成功:
關鍵字“GROUP”附近的語法不正確。
例如,如果當前日期是 13/09/2022,
2022 年 9 月 13 日 - 2 個月 = 2022 年 7 月 13 日
如果我的表中有以下日期:
06/05/2022
2022 年 13 月 5 日
20/05/2022
2022 年 5 月 31 日
2022 年 7 月 6 日
2022 年 10 月 6 日
17/06/2022
24/06/2022
2022 年 6 月 30 日
08/07/2022 (<13/07/2022)
15/07/2022 (>13/07/2022)
22/07/2022
29/07/2022
2022 年 5 月 8 日
2022 年 12 月 8 日
2022 年 8 月 19 日
26/08/2022
那么最終的輸出應該是:
2022 年 5 月 31 日
30/06/2022 (<13/07/2022)
15/07/2022 (>13/07/2022)
22/07/2022
29/07/2022
2022 年 5 月 8 日
2022 年 12 月 8 日
2022 年 8 月 19 日
26/08/2022
uj5u.com熱心網友回復:
您的語法完全無效,我不會費心修復它。
DISTINCT不是一個函式,它適用于整組列。- 您不能在 a 中使用聚合
WHERE,即使它們是視窗函式(它們不是)。 - 在
GROUP BY里面是CASE沒有意義的。
相反,我只是偏離你的要求
- 如果日期不到 2 個月,那么我想選擇所有日期(每周)。
- 如果日期超過 2 個月,那么我只想選擇每個月的最后一個日期(每月)。
ROW_NUMBER您可以為此使用策略。
SELECT
t.Date
FROM (
SELECT *,
rn = ROW_NUMBER() OVER (PARTITION BY EOMONTH(t.Date) ORDER BY t.Date DESC)
FROM [Table] t
) t
WHERE (
t.Date > DATEADD(month, -2, GETDATE())
OR rn = 1
)
ORDER BY
Date;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/507795.html
