2013-10-31 78 views
2

好吧,所以我想写一些SQL,我不知道如何解决这种情况。我有一个类似于下面的表格。基本思想是我需要获得处于'H'状态(足够简单)的记录,但是我需要排除处于'H'状态并稍后转移到'A'状态的记录日期。SQL - 与同一列中的多个值进行比较?

理想情况下,结果应该只返回最后两个记录,ID 03和04.你们会怎么做?

ID  STATUS  STAT_DATE 
01  A  05/01/2013 
01  H  05/01/2012 
02  A  12/01/2013 
02  H  12/01/2012 
03  H  03/01/2009 
04  H  02/01/2008 
+1

您使用的是什么SQL风格? – geomagas

回答

1

你可以这样来做:

select * 
from t t1 
where status='H' and not exists(
    select * 
    from t t2 
    where t1.id=t2.id and t2.status='A' and t2.stat_date > t1.stat_date) 

这会给你的表t的所有条目与状态=“H”那里是在T具有相同ID的条目,后面的日期和状态='A'。

+0

完美...这是我所需要的exaclty。非常感谢您的帮助! – user2941280

+0

欢迎您。如果您想接受针对您的问题的这个(或任何其他)解决方案,您可以设置绿色复选标记。 – Fabian

+0

嗨法比安,这是很好的帮助,但我需要知道你的一些东西。可以请你告诉(解释)什么“t1.id = t2.id”在做什么,以及它会如何影响结果?我完全空白,请提供尽可能多的信息。提前致谢 – nakul

相关问题