【问题标题】:SQL Conditional Select Help (Amazon Redshift SQL)SQL 条件选择帮助 (Amazon Redshift SQL)
【发布时间】:2021-04-12 13:55:28
【问题描述】:

我目前有 2 个查询要合并为 1 个。基本上,如果是周二 - 周五,我想提取前几天的销售额,如果是星期一,我想提取前 3 天的销售额。我的查询如下 - 有没有办法根据星期几对这些日期进行条件选择?

星期一的版本

SELECT *
FROM A
WHEN  DATE_TRUNC('day', timestamp) IN (CURRENT_DATE - 1, CURRENT_DATE - 2, CURRENT_DATE - 3)
  AND DATE_PART(weekday, current_date) = 1

周二至周五版本

SELECT *
FROM A
WHEN  DATE_TRUNC('day', timestamp) = CURRENT_DATE - 1
  AND DATE_PART(weekday, current_date) = 1

【问题讨论】:

    标签: sql conditional-statements amazon-redshift


    【解决方案1】:

    一个解决方案是:

    SELECT *
    FROM A
    WHERE DATE_TRUNC('date', timestamp) <= DATE_TRUNC('date', CURRENT_DATE)
    AND DATE_TRUNC('date', timestamp) >= case when DATE_TRUNC('day of week',CURRENT_DATE)  = 'Monday' then DATE_TRUNC('date', CURRENT_DATE - 3) else DATE_TRUNC('date',CURRENT_DATE) end
    

    【讨论】:

    • 不客气,如果有帮助,请接受/支持答案
    【解决方案2】:

    你可以使用`OR:

    SELECT *
    FROM A
    WHERE (DATE_TRUNC('day', timestamp) IN (CURRENT_DATE - 1, CURRENT_DATE - 2, CURRENT_DATE - 3) AND
            DATE_PART(weekday, current_date) = 1
           ) OR
           (DATE_TRUNC('day', timestamp) = CURRENT_DATE - 1 AND
            DATE_PART(weekday, current_date) <> 1
           )
    

    这可以稍微简化为:

    WHERE timestamp > CURRENT_DATE -
                      (CASE WHEN DATE_PART(weekday, current_date) = 1 INTERVAL '3 DAY'
                            ELSE INTERVAL '1 DAY'
                       END)
    

    注意:这假设没有未来的时间戳。

    【讨论】:

    • 所以我不希望它拉两个我希望它拉一个或另一个。如果是周一,则前 3 天拉出;如果是周二至周五,则仅在昨天拉出。我可能在最初的问题中没有说清楚。
    • @zscheimer 。 . .这就是这个逻辑的作用。 date_part() 条件只会匹配一次。
    猜你喜欢
    • 2011-07-28
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2011-05-14
    相关资源
    最近更新 更多