У меня есть список значений, и я должен отобразить материнское значение CHILDVALUE
следующим образом. MOTHERVALUE
должно совпадать с CHILDVALUE
при RNO = 1
, в противном случае MOTHERVALUE
повторяется для последующих строк до тех пор, пока не встретится новая последовательность, начинающаяся с RNO = 1. Вот что я хочу достичь
RNO ChildValue MotherValue SKIPNO CREATEDDATE
1 345dg 345dg 4 19/9/2018 2:49
2 342sds 345dg 4 19/9/2018 11:53
.
.
.
19 343dfd 345dg 4 6/11/2018 12:40
20 234dfs 345dg 4 6/11/2018 14:56
1 545ert 545ert 4 6/11/2018 15:17
2 543tye 545ert 4 7/11/2018 11:29
.
.
.
9 345cxv 545ert 4 16/11/2018 14:16
1 563mnj 563mnj 5 19/11/2018 2:12
Номера строк генерируются динамически в соответствии с SKIPNO
(без различий) и CREATEDDATE
. Но у меня проблема с отображением правильного MOTHERVALUE
для некоторых строк
Я пробовал приведенный ниже запрос, который наилучшим образом соответствует как минимум 50% требований.
select RNO
, CHILDVALUE
, case RNO when 1 then CHILDVALUE
else lag(MOTHERVALUE) over (order by SKIPNO, CreatedDate ASC) end as MOTHERVALUE
, SKIPNO, CreatedDate
from( SELECT (ROW_NUMBER() OVER (PARTITION BY A.SKIPNO
ORDER BY A.SKIPNO, A.CreatedDate ASC) RNO
, A.*
from (select distinct CHILDVALUE
, CHILDVALUE as MOTHERVALUE
, SKIPNO
, CreatedDate
from values ) A
)
)
Этот запрос частично дает ожидаемый результат, но все еще далек от фактического результата, поскольку показывает правильный MOTHERVALUE only for the first two rows. The query does not help me to show the correct
MOTHERVALUE` для более чем второй строки.
Вот мой стол:
CREATE TABLE VALUES (
CHILDVALUE VARCHAR2(36),
SKIPNO VARCHAR2(36),
CREATEDDATE DATE)
Просьба помочь.