【问题标题】:Complex Ranking in SQL (Teradata)SQL 中的复杂排名 (Teradata)
【发布时间】:2021-06-13 12:32:22
【问题描述】:

我手头有一个特殊的问题。我需要按以下方式排名:

  1. 每个 ID 都会获得一个新的排名。
  2. 排名#1 分配给具有最低日期的 ID。但是,该特定 ID 的后续日期可能更高,但它们将获得相对于其他 ID 的增量排名。 (例如,ADF32 系列将被视为排名第一,因为它的日期最低,尽管它以 09-11 月结束,而 RT659 从 8 月 13 日开始,它将随后排名)
  3. 对于特定 ID,如果天数连续,则排名相同,否则加 1。
  4. 对于特定 ID,排名以日期 ASC 给出。

如何制定查询?

【问题讨论】:

    标签: sql teradata rdbms analytical


    【解决方案1】:

    你需要两个步骤:

    select
       id_col
      ,dt_col
      ,dense_rank()
       over (order by min_dt, id_col, dt_col - rnk) as part_col  
    from
     (
        select
           id_col
          ,dt_col
          ,min(dt_col)
           over (partition by id_col) as min_dt
          ,rank()
           over (partition by id_col
                 order by dt_col) as rnk
        from tab
     ) as dt
    

    dt_col - rnk 为连续日期计算相同的结果 -> 相同的排名

    【讨论】:

    • 它为同一 ID 的连续日期提供差异排名。
    • id_col/dt_col 的组合是唯一的吗?也可以在内部选择中尝试dense_rank
    • 是的,内部查询中的 dense_rank() 运行良好。非常感谢。
    【解决方案2】:

    在领先/滞后上尝试 datediff,然后执行分区排名

    select t.ID_COL,t.dt_col, 
    rank() over(partition by t.ID_COL, t.date_diff order by t.dt_col desc) as rankk 
    from ( SELECT ID_COL,dt_col, 
    DATEDIFF(day, Lag(dt_col, 1) OVER(ORDER BY dt_col),dt_col) as date_diff FROM table1 ) t
    

    【讨论】:

      【解决方案3】:

      考虑这个问题的一种方法是“何时将等级加 1”。好吧,当具有相同id_col 的行上的前一个值相差超过一天时,就会发生这种情况。或者当该行是 id 的最早日期时。

      这将问题转化为累积和:

      select t.*,
             sum(case when prev_dt_col = dt_col - 1 then 0 else 1
                 end) over 
                  (order by min_dt_col, id_col, dt_col) as ranking
      from (select t.*,
                   lag(dt_col) over (partition by id_col order by dt_col) as prev_dt_col,
                   min(dt_col) over (partition by id_col) as min_dt_col
            from t
           ) t;
      

      【讨论】:

        猜你喜欢
        • 2021-09-20
        • 1970-01-01
        • 1970-01-01
        • 2022-12-17
        • 2014-06-30
        • 2021-09-14
        • 2012-09-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多