2017-01-16 3 views
1

Я хочу сгруппировать по ведущей функции по двум столбцам. Вот мои данные таблицы.Ведущая функциональная группа в оракуле

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 Ответ обновлен, все, что я сделал, было модифицировано 'GROUP BY' в CTE, а затем немного изменило соединение в запросе, чтобы использовать имя и элемент. –

+1

Большое спасибо. Оно работает. – John

 Смежные вопросы

  • Нет связанных вопросов^_^