2013-04-29 71 views
1

我需要比較查詢的同一個表中的行。比較SQL查詢中的行

下面是表的一個例子:

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相關聯的記錄中有一個記錄在今天的日期之後有一個結帳日期,那麼我不想返回他們的任何記錄。我只想返回結帳字段中每個記錄在今天日期之前的每個ID的記錄。

回答

1

爲此,分析功能是最好的辦法:

select id, checkin, checkout 
from (select t.*, max(checkout) over (partition by id) as maxco 
     from t 
    ) t 
where maxco <= trunc(sysdate) 

這假定數據存儲爲日期值而不是字符串(否則,最大將返回錯誤的值)。

+0

我想用多個表,因爲我在一個單獨的表中比較結帳日期。我剛剛結束第一次與:從(....)t1,t2? – trueinViso 2013-04-29 21:50:23

+0

@trueinViso。 。 。我想你應該問另一個問題,關於多個表。包括表格格式,示例數據以及所需的結果。這個問題非常清楚地開始「我需要比較查詢的同一個表中的行」。 – 2013-04-29 21:52:31

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); 
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