Получить последнюю строку за последнюю дату
Я работаю с 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