【问题标题】:Having problems getting stop number with ROW_NUMBER () OVER - DB2使用 ROW_NUMBER () OVER 获取停止号时出现问题 - DB2
【发布时间】:2020-07-31 02:16:22
【问题描述】:

我正在尝试报告活动。我有一个包含“停止编号”的表格,但该停​​止编号与活动发生的实际停止无关(停止 1 到达/离开,停止 2 到达/离开)。所以我想使用 ROW_NUMBER () 对停靠点进行编号...

    select 
WH.SEGMENT_NB,
WH.STOP_NB,
ROW_NUMBER () OVER(PARTITION BY WH.SEGMENT_NB, WH.STOP_NB ORDER BY WH.STOP_NB) as Stop,
MAX(CASE WHEN WH.WORK_ACTION_TYPE_ID = 'EAA' 
    THEN WH.CREATE_TS
END) AS Actual_Arrival,
MAX(CASE WHEN WH.WORK_ACTION_TYPE_ID = 'EAD' 
    THEN WH.CREATE_TS
END) AS Actual_Departure,
WH.CREATED_BY_TX AS ENTERED_BY
    from VASDW.TNT_WORK_HISTORY WH
    join VASDW.TNT_WORK_ACTION_TYPE WA on WA.WORK_ACTION_TYPE_ID = WH.WORK_ACTION_TYPE_ID
        and WA.RECORD_DELETE_FG = 'N'
    where WH.WORK_ACTION_TYPE_ID in('EAA','EAD')
    and wh.segment_nb = 15931846
   GROUP BY WH.SEGMENT_NB, WH.STOP_NB, WH.CREATED_BY_TX
   ORDER BY WH.SEGMENT_NB, WH.STOP_NB

我希望看到这个:

   Segment_Nb     STOP_NB     STOP
    15931846       12345       1
    15931846       12345       1
    15931846       23456       2

但它正在读取 STOP 1,2,1。有什么想法我需要解决吗? TIA。

【问题讨论】:

    标签: sql select db2 window-functions


    【解决方案1】:

    我认为你想要:

    DENSE_RANK() OVER(PARTITION BY WH.SEGMENT_NB ORDER BY WH.STOP_NB) as Stop
    

    即:

    • STOP_NB 不应属于该分区 - 您只希望它用于订购

    • 您希望 DENSE_RANK() 仅在 STOP_NB 更改时递增,没有间隙

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 2021-02-12
      • 2022-11-02
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多