【问题标题】:SQL add Order column that represents Day of the weekSQL 添加表示星期几的 Order 列
【发布时间】:2021-07-26 21:08:42
【问题描述】:

处理一个 3 个月的数据集,该数据集在该时间范围内的每一天都有一条记录/行。我想添加一个具有 0-6 或 1-7 值的“订单”列。例如,如果在星期一执行的查询为 0,星期二:1,星期三:2,星期四:3,星期五:4,星期六:5,星期日:6。如果查询是在星期五执行的,那么星期五记录将包含:0,星期六:1,星期日:2,等等......

最终目标是在 PBI 仪表板中使用此查询 - 其中,在按星期几聚合后 - 当按订单列排序时,当前日期首先显示;即我不希望结果总是显示周日到周六。如果是星期三,有人在看仪表盘,我希望数据的顺序是 W、Th、F、S、Su、M、T。我相信这可以通过这个 order 列来完成。

有什么想法吗?谢谢!

【问题讨论】:

    标签: sql oracle powerbi


    【解决方案1】:

    您想要基于当前日期的星期几。这实际上是一个算术计算,您需要特定日期和当前日期 mod 7 之间的差异,但需要更多的算术。

    这样计算:

    select 6 - mod(trunc(sysdate - 1) - <datecol>, 7) 
    

    【讨论】:

      【解决方案2】:

      要计算相对“天”,您可以这样做:

      mod(to_char(t.recorded, 'D') + 7 - to_char(current_date, 'D'), 7)
      

      例如:

      select
        t.*,
        mod(to_char(t.recorded, 'D') + 7 - to_char(current_date, 'D'), 7) as diff
      from t;
      

      结果(今天是星期一):

       RECORDED   VALUE  DIFF 
       ---------- ------ ---- 
       2021-01-01  123    4    
       2021-01-02  456    5    
       2021-01-03  789    6    
       2021-01-04  12     0    
       2021-01-05  345    1    
       2021-01-06  678    2    
       2021-01-07  901    3    
       2021-01-08  234    4    
       2021-01-09  567    5    
      

      请参阅SQL Fiddle 的运行示例。

      【讨论】:

        猜你喜欢
        • 2017-12-20
        • 1970-01-01
        • 2015-07-24
        • 2020-01-16
        • 1970-01-01
        • 2017-01-12
        • 1970-01-01
        • 1970-01-01
        • 2011-08-23
        相关资源
        最近更新 更多