我需要比较查询的同一表中的行。
以下是该表的示例:
id checkin checkout
1 01/15/13 01/31/13
1 01/31/13 05/20/13
2 01/15/13 05/20/13
3 01/15/13 01/19/13
3 01/19/13 05/20/13
4 01/15/13 02/22/13
5 01/15/13 03/01/13
我将结帐日期与今天的日期进行比较,如果是在今天的日期之前,那么我想返回结果。但是,类似于id 1和3,它们有多个记录。如果与同一个ID相关联的记录之一的记录在今天的日期之后有一个结帐日期,那么我不想返回任何记录。我只想返回每个记录的记录,其中每个记录都在结帐字段中的今天日期之前。
答案 0 :(得分:1)
为此,分析函数是最好的方法:
select id, checkin, checkout
from (select t.*, max(checkout) over (partition by id) as maxco
from t
) t
where maxco <= trunc(sysdate)
这假设数据存储为日期值而不是字符串(否则,max将返回错误的值)。
答案 1 :(得分:0)
select id, checking from
Table
where checkout < CURRENT_DATE --Postgresql date of today, Oracle should have an equivalent now
and id not in (select id from Table where checkout >= CURRENT_DATE);
答案 2 :(得分:0)
这应该为您提供之前记录的所有记录结果,并且所有具有相同ID的记录也在时间之前。
SELECT Ta.*
FROM TABLE Ta,
(SELECT MAX(checkout) checkout, ID FROM TABLE GROUP BY ID) Tb
WHERE Ta.ID = Tb.ID
AND sysdate >= Ta.checkout -- checks for date in current record
AND sysdate >= Tb.checkout -- checks for dates in all records