下面我有一个奇怪的要求来显示应用程序的当前状态和之前的状态my requirements in a picture
我试图使用SQL分别获取每个应用程序和剩余集合的最高值,但我不确定将它们组合在一起的最佳方法。但我相信有更简单的方法可以做到这一点。
在此处粘贴我的查询。
查询1向我提供了每个应用程序的最新状态:
select application_id, last_updated, application_state
from BELL_APPLICATION_EVENTS where (application_id, last_updated) in (
select application_id, max(last_updated) as last_updated
from BELL_APPLICATION_EVENTS
group by application_id
) order by last_updated desc ;
以下查询提供了其他状态的数据集,例如"应用程序已完成"和"发送的用户电子邮件"如图所示。
select *
from BELL_APPLICATION_EVENTS U1
where last_updated < (
select max(last_updated)
from BELL_APPLICATION_EVENTS where application_id = U1.application_id)
order by U1.LAST_UPDATED desc ;
您是否可以帮助提供一个更简单的选项,以便在每个应用程序ID的单个记录中获取当前状态和以前的状态?
答案 0 :(得分:5)
LAG分析功能非常适用于此。请使用SQL Fiddle代替图片中的数据来提供测试用例。来自文档:
SELECT last_name, hire_date, salary,
LAG(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal
FROM employees
WHERE job_id = 'PU_CLERK';