基于多个条件的SQL SELECT日期



我在一个包含每周日期的表中有一组日期。

我想选择以下内容:

如果日期小于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"附近的语法不正确。

例如,如果当前日期为2022年9月13日,

2022年9月13日-2个月=2022年7月13日

如果我的表中有以下日期:

  • 06/05/2022

    2022年5月13日

    2022年5月20日

    2022年5月31日

    2022年6月7日

    2022年6月10日

    2022年6月17日

    2022年6月24日

    2022年6月30日

    08/07/2022(<13/07/2022(

    2022年7月15日(>2022年7日13日(

    2022年7月22日

    2022年7月29日

    2022年8月5日

    2022年8月12日

    2022年8月19日

    2022年8月26日

那么最终输出应该是:

  • 2022年5月31日

    2022年6月30日(<2022年7月13日(

    2022年7月15日(>2022年7日13日(

    2022年7月22日

    2022年7月29日

    2022年8月5日

    2022年8月12日

    2022年8月19日

    2022年8月26日

您的语法完全无效,我不想麻烦修复它。

  • DISTINCT不是一个函数,它适用于整个列集
  • 不能在WHERE内部使用聚合,即使它们是窗口函数(它们不是(
  • GROUP BYCASE内部,这毫无意义

相反,我只是偏离了你的要求

  • 如果日期小于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;

相关内容

  • 没有找到相关文章

最新更新