が、私はこれを行うだろう LAG解析関数を使用して::
WITH a AS (SELECT 1 custid, to_date('20/01/2016', 'dd/mm/yyyy') startdate FROM dual UNION ALL
SELECT 2 custid, to_date('25/01/2016', 'dd/mm/yyyy') startdate FROM dual UNION ALL
SELECT 2 custid, to_date('17/06/2016', 'dd/mm/yyyy') startdate FROM dual),
b AS (SELECT 1 custid, to_date('01/01/2016', 'dd/mm/yyyy') startdate, to_date('15/01/2016', 'dd/mm/yyyy') enddate FROM dual UNION ALL
SELECT 1 custid, to_date('20/01/2016', 'dd/mm/yyyy') startdate, to_date('01/04/2016', 'dd/mm/yyyy') enddate FROM dual UNION ALL
SELECT 2 custid, to_date('01/01/2015', 'dd/mm/yyyy') startdate, to_date('01/06/2016', 'dd/mm/yyyy') enddate FROM dual UNION ALL
SELECT 2 custid, to_date('05/08/2015', 'dd/mm/yyyy') startdate, to_date('31/12/2015', 'dd/mm/yyyy') enddate FROM dual UNION ALL
SELECT 2 custid, to_date('25/01/2016', 'dd/mm/yyyy') startdate, to_date('31/05/2016', 'dd/mm/yyyy') enddate FROM dual UNION ALL
SELECT 2 custid, to_date('17/06/2016', 'dd/mm/yyyy') startdate, to_date('31/12/2016', 'dd/mm/yyyy') enddate FROM dual),
b2 AS (SELECT custid,
startdate,
enddate,
lag(enddate) OVER (PARTITION BY custid ORDER BY startdate) prev_enddate
FROM b)
SELECT a.custid,
a.startdate,
b2.prev_enddate
FROM a
INNER JOIN b2 ON a.startdate = b2.startdate;
CUSTID STARTDATE PREV_ENDDATE
---------- ----------- ------------
1 20/01/2016 15/01/2016
2 25/01/2016 31/12/2015
2 17/06/2016 31/05/2016
がどのように日付値を格納している
あなたが結果を再現したい場合は、ここでrextesterリンクですか? 'DD-MM-YYYY'または' MM-DD-YYYY'形式ですか?または単に文字型として格納していますか?終了日に「1-15-2016」と「31-12-2015」という値が1つあるため、混乱しています。 –
値はDD-MM-YYYYとして保存されます。混乱して申し訳ありません – Jeuf
EndDateで '1-15-2016'をどうやって使うことができますか? MM(月)の値は「12」より大きくはできません。もう一度データを確認してください。 –