2014-11-06 81 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