获取列的最大值的列和&那么另一列

时间:2017-10-08 08:49:29

标签: sql oracle

我的表:

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

0 个答案:

没有答案