我正在尝试为以下场景编写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数据库
自从过去两天以来我一直在尝试,但从来没有在这里提供一个查询解决方案。
任何帮助将不胜感激。
答案 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);