2010-01-27 51 views

回答

1

如果您使用的SQL Server:

SELECT 
    <add columns here> 
FROM 
    tblEnquiry 
WHERE 
    NOT EXISTS 
    (
      SELECT * 
      FROM tblHistory H 
      WHERE H.enquiry_no = E.enquiry_no 
      AND H.history_createdon BETWEEN DATEADD(dy, -7, GETDATE()) AND GETDATE() 
    ) 
+0

爲什麼BETWEEN?爲什麼不只是> = DATEADD(DAY,-7,CURRENT_TIMESTAMP)? – 2010-01-27 22:37:24

+0

它避免了未來有日期的情況。理想情況下,列有一個約束,以防止這種情況,但以防萬一... ... – 2010-01-27 23:17:46

3
SELECT e.* 
FROM tblEnquiry e 
WHERE NOT EXISTS(SELECT * FROM tblHistory h WHERE e.Enquiry_No = e.Enquiry_No AND h.History_CreatedOn >= DATEADD(dd, -7, GETDATE()) 
0
WITH Hist(enquiry_no, history_createdon) AS 
(
    SELECT Enquiry_No, History_CreatedOn 
    FROM tblHistory 
    WHERE History_CreatedOn >= DATEADD(dd, -7, GETDATE()) 
) 
SELECT * 
FROM tblEnquiry 
    LEFT OUTER JOIN Hist ON tblHist.enquiry_no = tblEnquiry.enquiry_no 
WHERE tblHistory.enquiry_no IS NULL 

這將避免標準的糟糕表現NOT EXISTS查詢

+0

OP要查詢最近7天未更新...這將查找沒有任何歷史記錄 – AdaTheDev 2010-01-27 20:29:50

+3

*什麼*表現不佳的不存在? http://explainextended.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server/ -1不理解SQL – gbn 2010-01-27 20:44:39

+0

編輯以反映AdaTheDev的評論...對於NOT EXISTS的糟糕表現,那就是經驗 – 2010-01-27 20:52:23

0

得到的答案

選取H1 。詢問_編號 來自tblHistory h1 羣由h1.Enquiry_No 01具有DATEDIFF(DD,MAX(h1.History_CreatedOn),GETDATE())> = 7

我尚未自過去7天更新查詢