我需要在SCCM 2012中进行查询以获取每个用户最后访问过的文件。我试图在sql中进行查询,但是我得到了很多重复的结果。
我需要的结果必须只包含每个用户的最后日期(最近一次)。
我使用的查询是:
SELECT
dbo.v_GS_SoftwareFile.FileName,
dbo.v_R_System.User_Name0,
dbo.v_GS_SoftwareFile.FileModifiedDate
FROM
dbo.v_GS_SoftwareFile
CROSS JOIN dbo.v_R_System
WHERE
(dbo.v_GS_SoftwareFile.FileName = N'outlook.exe')
AND (dbo.v_GS_SoftwareFile.FileModifiedDate > CONVERT(DATETIME, '2015-02-01 00:00:00', 102))
GROUP BY
dbo.v_R_System.User_Name0,
dbo.v_GS_SoftwareFile.FileName,
dbo.v_GS_SoftwareFile.FileModifiedDate
我需要添加到此查询中吗?
答案 0 :(得分:1)
您的CROSS JOIN可能对您报告的“重复结果”负责,因为您没有实际的连接条件(因此,如果一个表中有10条记录,另一条表中有100条记录,那么您将拥有10x100 = 1000条记录)。您的SoftwareFile和System表之间是否有公共密钥?
一旦您添加了JOIN条件,要将其缩小到每个用户的单个日期,请使用MAX()
功能,如下所示:
SELECT
dbo.v_GS_SoftwareFile.FileName,
dbo.v_R_System.User_Name0,
MAX(dbo.v_GS_SoftwareFile.FileModifiedDate) AS LastFileModifiedDate
FROM
dbo.v_GS_SoftwareFile
CROSS JOIN
dbo.v_R_System
WHERE
(dbo.v_GS_SoftwareFile.FileName = N'outlook.exe')
AND (dbo.v_GS_SoftwareFile.FileModifiedDate > CONVERT(DATETIME, '2015-02-01 00:00:00', 102))
GROUP BY
dbo.v_R_System.User_Name0,
dbo.v_GS_SoftwareFile.FileName