Возникают проблемы с получением номера остановки с помощью ROW_NUMBER () OVER - DB2 - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь сообщить о деятельности. У меня есть таблица, которая включает в себя «номер остановки», но этот номер остановки не имеет ничего общего с фактической остановкой, на которой происходила активность (остановка 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. Есть идеи, что мне нужно исправить? ТИА.

1 Ответ

1 голос
/ 17 апреля 2020

Я думаю, что вы хотите:

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

То есть:

  • STOP_NB не должно принадлежать разделу - вы хотите его только для заказа

  • Вы хотите, чтобы DENSE_RANK() увеличивался только при изменении STOP_NB без пробелов

...