2017-01-16 13 views
1

2つの桁で鉛の関数でグループ化したい。ここに私のテーブルのデータです。oracleでのリード関数グループ

Id Name_Id Name Item_Id Item_Name   date 
1  1  Car  1   SUV  1-Jan-2015 
2  1  Car  1   SUV  12-March-2015 
3  1  Car  1   SUV  20-April-2015 
4  1  Car  2   Sport  23-April-2015 
5  2  Bike  1   SUV  18-July-2015 
6  2  Bike  1   SUV  20-Aug-2015 
7  2  Bike  2   Sport  18-Sept-2015 
8  2  Bike  3   Honda  20-OCT-2015 

そして、上記のような結果が必要です。

Id Name_Id Name Item_Id Item_Name  start date  end date 
1  1  Car  1   SUV  1-Jan-2015  20-April-2015 
2  1  Car  2   Sport  20-April-2015 23-April-2015 
3  2  Bike  1   SUV  18-July-2015 20-Aug-2015 
4  2  Bike  2   Sport  20-Aug-2015  18-Sept-2015 
5  2  Bike  3   Honda  18-Sept-2015 20-OCT-2015 

本当にありがとうございます。

答えて

1

ここでLEADを使用する必要はないと思います。下記のCTEは、それぞれItem_Idについて、最も早い日付と最新の日付を計算します。これは元のテーブルに結合され、に最も近いレコードに制限されます。Item_Id同時に、終了日も結合中に引き込まれます。

WITH cte AS (
    SELECT Name, 
      Item_Id, 
      MIN(date) AS start_date, 
      MAX(date) AS end_date 
    FROM yourTable 
    GROUP BY Name, Item_Id 
) 
SELECT t1.Id, t1.Name_Id, t1.Name, t1.Item_Id, t1.Item_Name, 
     t2.start_date, 
     t2.end_date 
FROM yourTable t1 
INNER JOIN cte t2 
    ON t1.Item_Id = t2.Item_Id AND 
     t1.Name = t2.Name AND 
     t1.date = t2.start_date 
+0

回答ありがとうございますが、Name_Id&Item_Idによってグループ化されたデータが必要です。質問を更新してください。 – John

+0

@John回答が更新されました。私がしたのは、CTEの 'GROUP BY'を修正し、名前と項目を使用するようにクエリ内の結合をわずかに変更することでした。 –

+1

おかげで多くの仲間:)。できます。 – John

関連する問題