下のコードで空白の出力が表示されています。私のコードは、テーブルを昇順に配置した後、すなわち、shipment_status_id = 32になるたびに次のステータスを取得する必要があります。これ以上の代替案を修正するのを手伝ってください。例についてはテーブル内の次の行にOracle SQLが必要
:
Shipment_id ---------ステータス---------- CHANGE_DATE --------------- EMPLOYEE_ID
----- 1234 --------------- 211 ---------- 10 Jan 17 12:32 PM -------- -------- 1111
----- 1234 --------------- 32 ----------- 10 Jan 17 01 :32 PM ---------------- 1111
----- 1234 --------------- 23 ---- ------- 10 Jan 17 02:32 PM ---------------- 1111
ので例では、それが出力として23、10 1月17日に午前2時32分PMを与える必要があります
おかげで、
SELECT DISTINCT A41.shipment_id
,A41.shipment_status_id
,A41.CHANGE_DATE
FROM (
SELECT DISTINCT shipment_id
,holder_employee_id
,shipment_status_id
,CHANGE_DATE
,row_number() OVER (
PARTITION BY shipment_id ORDER BY CHANGE_DATE ASC
) AS rn1
FROM db1.table1
WHERE TRUNC(CHANGE_DATE) = to_date('{RUN_DATE_YYYY-MM-DD}', 'YYYY-MM-DD')
) A41
WHERE rn1 = CASE
WHEN shipment_status_id IN (32)
AND rn1 = 1
THEN 2
WHEN shipment_status_id IN (32)
AND rn1 = 2
THEN 3
WHEN shipment_status_id IN (32)
AND rn1 = 3
THEN 4
WHEN shipment_status_id IN (32)
AND rn1 = 4
THEN 5
WHEN shipment_status_id IN (32)
AND rn1 = 5
THEN 6
WHEN shipment_status_id IN (32)
AND rn1 = 6
THEN 7
WHEN shipment_status_id IN (32)
AND rn1 = 7
THEN 8
WHEN shipment_status_id IN (32)
AND rn1 = 8
THEN 9
WHEN shipment_status_id IN (32)
AND rn1 = 9
THEN 10
END
質問を更新してください。いくつかのサンプルデータとクエリの予想される出力を追加してください。おそらく、あなたは 'LEAD()'解析関数の後にいるでしょうか? 'table1_v1.rn1 = table1_v2.rn1 + 1'のself-join – Boneist
WHERE句のCASE式の代わりにAND/ORを使う方が良いでしょう。 – jarlh
また、where句は、 'rn1 = rn1 + 1'の行のサブセットが必要だと効果的に言っています。 (つまり1 = 2)返された行がなくなってしまう理由です。 – Boneist