2011-12-02 22 views
0

我有兩張時間間隔的記錄提取表,如下所示。來自同一張表的記錄差異

Query1: 

select distinct(Id) 
from dbo.tableA 
where datediff(hour, dtCreate, getdate()) < 24 

Query2: 
select distinct(Id) 
from dbo.tableA 
where datediff(hour, dtCreate, getdate()) < 48 
and datediff(hour, dtCreate, getdate()) > 24 

query1返回50條記錄,query2返回45條記錄。 在此之後,我想查找哪些不在query2中但存在於query1中的記錄。任何人都可以建議我如何做到這一點?提前致謝。

+2

如果我錯了,請糾正我,但這裏沒有交集。查詢1列出時間<24,查詢2列出> 24。 – bonsvr

+1

@bonsvr:我假設'Id'儘管名稱不是表格的唯一鍵。 (否則'distinct(Id)'也沒有意義。)因此,即使沒有單獨的表記錄可以重疊,兩個查詢之間的Id也可能有一些重疊。 – ruakh

+0

@ruakh:是的,它的主鍵Id可以重複多次。 – Ankur

回答

1

使用the EXCEPT keyword

SELECT Id 
    FROM dbo.tableA 
WHERE datediff(hour, dtCreate, getdate()) < 24 
EXCEPT 
SELECT Id 
    FROM dbo.tableA 
WHERE datediff(hour, dtCreate, getdate()) < 48 
    AND datediff(hour, dtCreate, getdate()) > 24 
; 

(注:我擺脫了DISTINCT S的,因爲EXCEPT這是暗示的;但如果您寧願將DISTINCT留在那裏,爲了清楚起見,您絕對可以。)

+0

感謝您的回覆。這幫助了我。 – Ankur

+0

@Ankur:不客氣! – ruakh

0

看來你要計算的差集,所以你可以使用EXCEPT

select distinct(Id) 
from dbo.tableA 
where datediff(hour, dtCreate, getdate()) < 24 
EXCEPT 
select distinct(Id) 
from dbo.tableA 
where datediff(hour, dtCreate, getdate()) < 48 
and datediff(hour, dtCreate, getdate()) > 24 
+0

感謝您的回覆。 – Ankur

相關問題