Oracle SQL分区依据以选择最近的日期

Oracle SQL分区依据以选择最近的日期,sql,oracle,window-functions,Sql,Oracle,Window Functions,我正在使用下面的SQL从我的employee\u life\u events表中选择堆栈顶部最近的生命事件。为了从堆栈顶部(最近)提取,我需要通过ssn为每个life\u事件日期提取最高的leseq\u no。因此,通过下面的SQL,我可以按日期获得每个成员(ssn)的栈顶生命事件记录。我现在需要提取最近的日期。现在我知道,我可以尝试构建另一个子查询并使用max函数(不确定这方面的提示是否会受到欢迎),但我也想知道是否有更有效的方法使用partitionby语句来实现这一点。通过向分区按部分添加

我正在使用下面的SQL从我的
employee\u life\u events
表中选择堆栈顶部最近的生命事件。为了从堆栈顶部(最近)提取,我需要通过
ssn
为每个
life\u事件日期提取最高的
leseq\u no
。因此,通过下面的SQL,我可以按日期获得每个成员(ssn)的栈顶生命事件记录。我现在需要提取最近的日期。现在我知道,我可以尝试构建另一个子查询并使用max函数(不确定这方面的提示是否会受到欢迎),但我也想知道是否有更有效的方法使用partitionby语句来实现这一点。通过向
分区按
部分添加字段,或向
顺序按
部分添加字段

总之,我需要从SSN的
employee\u life\u events
表中提取堆栈顶部(最近的生命事件记录)。堆栈最顶端的寿命事件记录是最近的
寿命事件日期的记录(根据SSN),并且具有最高的
序列号(针对该特定日期)

最顶层的生命事件记录是最近的生命事件日期的记录(根据SSN),并且具有最高的le_seq no(针对该特定日期)

我认为你想要:

select t.*
from (
    select 
        e.*,
        row_number() over(
            partition by ssn
            order by life_event_date desc, le_seq_no desc
        ) rn
    from employee_life_events e
) t
where rn = 1
这将使用与原始查询不同的分区和排序。我还消除了不必要的嵌套级别

最顶层的生命事件记录是最近的生命事件日期的记录(根据SSN),并且具有最高的le_seq no(针对该特定日期)

我认为你想要:

select t.*
from (
    select 
        e.*,
        row_number() over(
            partition by ssn
            order by life_event_date desc, le_seq_no desc
        ) rn
    from employee_life_events e
) t
where rn = 1
这将使用与原始查询不同的分区和排序。我还消除了不必要的嵌套级别