SQL Query比较同一个表中最近修改的两个行

时间:2014-12-19 00:29:29

标签: sql oracle

我正在尝试为以下场景编写SQL查询

这是我表格的简单版本

ID      Value          modified Date

1      complete        12/18/2014
3      pending         12/12/2014
2      complete        12/14/2014
2      not started     12/10/2014
1      pending         12/11/2014
3      not started     12/12/2014
2      complete        12/16/2014
1      testing         12/13/2014
3      complete        12/17/2014


我正在尝试获取两个最近修改日期具有不同“值”的ID列表。

例如在上表中,ID“1”的两个最近日期是2014年12月18日和12/13/2014, 该行的相应值是“完成”和“测试”,它们不相等,因此将在我的列表中。

但ID“2”不在列表中,因为“2”的最新两个修改日期(12/14和12/16)具有相同的值“完成”

所以我想得到的结果是

ID   Value  

1    Complete
3    Complete

我正在使用 Oracle数据库

自从过去两天以来我一直在尝试,但从来没有在这里提供一个查询解决方案

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

您可以使用row_number()和条件聚合:

执行此操作
select id, max(case when seqnum = 1 then value end) as value
from (select t.*, row_number() over (partition by id order by modifieddate desc) as seqnum
      from table t
     ) t
group by id
having max(case when seqnum = 1 then value end) <> max(case when seqnum = 2 then value end);