Получить последнюю строку за последнюю дату

Я работаю с Oracle 10g. У меня есть таблица TABLE_X со следующими данными:

             **Sup_ID     Start_Date     End_Date**
               S001       01-01-2010     31-12-2020
               S001       01-01-2011     31-12-2019
               S001       01-01-2012     31-12-2018
               S002       01-01-2010     31-12-2014
               S002       01-01-2014     31-12-2015
               S003       01-01-2012     30-09-2013
               S004       01-01-2010     31-12-2014
               S004       01-01-2011     31-12-2013

Теперь мне нужно написать SQL-запрос, чтобы получить каждый Sup_ID с самой последней датой начала и окончания, и результат будет примерно таким:

            **Sup_ID     Start_Date        End_Date**
              S001       01-01-2012        31-12-2018
              S002       01-01-2014        31-12-2015
              S003       01-01-2012        30-09-2013
              S004       01-01-2011        31-12-2013

Обратите внимание, что я использую СУБД Oracle. Может ли кто-нибудь помочь мне в этом отношении? Спасибо вам всем.

3 ответа

Простая агрегатная функция max() должна решить проблему

select *
from Table1
where ("Sup_ID", "Start_Date") in (select "Sup_ID", max("Start_Date") 
                       from Table1
                       group by "Sup_ID");

скрипка

Select * from 
(
select *,rn=row_number()over(partition by Sup_ID order by Start_Date desc) from table
)x
where x.rn=1

Попробуй это:

SELECT T2.Sup_ID,T1.Start_Date,T2.End_Date
FROM TableName T1 JOIN
(SELECT Sup_ID,MAX(End_Date) as End_Date
 FROM TableName
 GROUP BY Sup_ID) T2 ON T1.Sup_ID=T2.Sup_ID AND T1.End_Date=T2.End_Date
ORDER BY T2.Sup_ID
Другие вопросы по тегам