【发布时间】:2020-06-16 04:27:42
【问题描述】:
我正在使用下面的 SQL 从我的employee_life_events 表中选择堆栈顶部最近的生活事件。为了拉到堆栈的顶部(最近的),我需要将每个life_event_date 的最高le_seq_no 拉到ssn。因此,使用下面的 SQL,我按日期列出了每个成员 (ssn) 的堆栈生命事件记录的顶部。我现在需要提取最近的日期。现在我知道我可以尝试构建另一个子查询并使用一个 max 函数(不知道究竟如何才能得到这样的提示),但我也想知道是否有更有效的方法来通过分区执行此操作陈述。通过向partition by 部分添加一个字段或向order by 部分添加一个字段。
总而言之,我需要通过 SSN 从employee_life_events 表中拉出栈顶(最近的生活事件记录)。栈顶生命事件记录是最近的life_event_date 且具有最高le_seq_no(针对该特定日期)的记录(每个 SSN)。
SELECT *
FROM
(SELECT *
FROM
(SELECT ele1.*,
ROW_NUMBER() OVER (PARTITION BY ele1.SSN, LIFE_EVENT_DATE ORDER BY LIFE_EVENT_DATE DESC, LE_SEQ_NO DESC) as seqnum
FROM EMPLOYEE_LIFE_EVENTS ele1) ele1
WHERE seqnum = 1) ele
【问题讨论】:
标签: sql oracle window-functions