0

我需要在 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

我需要在这个查询中添加什么?

4

1 回答 1

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
于 2015-04-16T18:15:55.263 回答