2014-11-06 77 views
0

我有2個表,Jobs和AdminUsersLog。 AdminUsersLog包含作業中每個作業記錄上執行的操作日誌。爲什麼這個SQL語句不檢索DISTINCT記錄

我正在嘗試檢索空閒時間超過7天的作業列表。下面的這個SQL似乎是拉出每個作業的所有日誌條目,因此從日誌中提取較早的條目,當然這些條目總是會超過7天。

我需要爲AdminUsersLog.ulDate早於7天的每個作業檢索一條記錄。

SELECT DISTINCT Jobs.ID, Jobs.bStatus AS jStatus, Jobs.sID, Jobs.insDate, Jobs.statusLabel, Jobs.cID, AdminUsersLog.ulDate, AdminUsersLog.ulJobType 
FROM AdminUsersLog LEFT JOIN Jobs 
ON (AdminUsersLog.ulJobID = Jobs.ID AND AdminUsersLog.ulJobType = 1) 
WHERE AdminUsersLog.ulJobType = 1 
AND (SELECT TOP(1) AdminUsersLog.ulDate FROM AdminUsersLog WHERE AdminUsersLog.ulJobID =  Jobs.ID AND AdminUsersLog.ulJobType = 1) < DATEADD(dd,-7,GETDATE()) 
AND Jobs.bStatus < 8 

Top X results; http://pastebin.com/RcvxbxCV

+0

請分享你的查詢檢索表記錄 – 2014-11-06 11:46:17

+0

嗨Hiral,鏈接到上述結果;-) – DannyBoy 2014-11-06 11:58:49

+0

*** **什麼*數據庫是這樣的? SQL只是查詢**語言** - 不是產品.....這是用於** SQL Server **還是用於Microsoft Access? – 2014-11-06 12:05:47

回答

1

您設定ulDate列

AS

SELECT CONVERT(DATE,ulDate) AS ulDate 

ON選擇字段

SELECT CAST('2014-01-23 15:23:42.093' AS DATE) like this 

beause您ulDate場不明顯

查詢設置爲

SELECT  DISTINCT Jobs.ID, Jobs.bStatus AS jStatus, Jobs.sID, Jobs.insDate, Jobs.statusLabel, Jobs.cID, 
       CONVERT(DATE,AdminUsersLog.ulDate) AS ulDate, AdminUsersLog.ulJobType 
    FROM  AdminUsersLog 
    LEFT JOIN Jobs ON (AdminUsersLog.ulJobID = Jobs.ID AND AdminUsersLog.ulJobType = 1) 
    WHERE  AdminUsersLog.ulJobType = 1 
       AND (SELECT TOP(1) AdminUsersLog.ulDate FROM AdminUsersLog WHERE AdminUsersLog.ulJobID = Jobs.ID AND AdminUsersLog.ulJobType = 1) < DATEADD(dd,-7,GETDATE()) 
       AND Jobs.bStatus < 8 
+0

嗨非常感謝你,雖然我的結果仍然顯示每個工作的多個記錄...看到結果在這裏; [鏈接](http://pastebin.com/2F2FC2XS)您可以看到多個Jobs.ID。我只需要AdminUsersLog中的最新條目。 – DannyBoy 2014-11-06 14:15:01

1

這將讓你在工作中的條目。這可以是任何匹配的條目,因爲您沒有爲TOP表達式指定排序順序。大多數情況下,隨機挑選的條目將會老化。因此,要麼指定排序順序:

SELECT TOP(1) AdminUsersLog.ulDate 
FROM AdminUsersLog 
WHERE AdminUsersLog.ulJobID = Jobs.ID AND AdminUsersLog.ulJobType = 1 
ORDER BY ulDate DESC 

或者乾脆使用MAX:

SELECT MAX(AdminUsersLog.ulDate) 
FROM AdminUsersLog 
WHERE AdminUsersLog.ulJobID = Jobs.ID AND AdminUsersLog.ulJobType = 1