我的表:
create table temp_table_name
(seq number(10), start_Date date, end_date date, param varchar2(10))
我的PK:
alter table temp_table_name add primary key (seq,start_date,end_Date)
我的记录:
SEQ START_DATE END_DATE PARAM
10 01-Jan-2017 01-Jan-2020 10
10 01-Jan-2017 01-Jan-2022 20
10 05-Jan-2017 01-Jan-2022 30
10 06-Jan-2017 01-Jan-2020 25
10 06-Jan-2017 01-Jan-2021 50
我的要求
使用MAX查找记录(START_DATE)&在具有MAX(END_DATE)
的那些记录中我的尝试
Select M1.* From Temp_Table_Name M1,
(
With x as (
Select T1.SEQ,T1.START_DATE,T1.END_DATE
From
Temp_Table_Name T1 Left Outer Join Temp_Table_Name T2
On T1.Seq = T2.Seq
And T1.Start_Date < T2.Start_Date
Where T2.SEQ is null)
Select X1.SEQ,X1.START_DATE,X1.END_DATE
From
X X1 Left Outer Join X X2
On X1.Seq = X2.Seq
And X1.End_Date < X2.End_Date
Where X2.Seq is null
) M2
Where M1.Seq = M2.Seq
And M1.START_DATE = M2.Start_Date
And M1.End_Date = M2.End_Date
虽然它以我想要的方式获取记录,但查询看起来并不那么好。我怀疑它是最有效的方法。我还想知道,在未来我还没有遇到的情况下,我试图做到这一点的方式是否存在任何问题。
找到了从Here创建查询的想法。
修改
使用更优雅的查询执行此操作的另一种方法:
Select * From (
Select t1.*,
row_number() over (partition by seq order by start_date desc, end_Date desc) rank
From temp_table_Name T1
)Where rank = 1