Oracle SQL当前和以前的状态在同一输出记录中

时间:2015-10-09 13:09:28

标签: sql oracle

下面我有一个奇怪的要求来显示应用程序的当前状态和之前的状态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的单个记录中获取当前状态和以前的状态?

1 个答案:

答案 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';