【问题标题】:Select only first row of specify distinct results from one column only仅选择第一行,仅从一列中指定不同的结果
【发布时间】:2020-04-30 20:28:08
【问题描述】:

我正在尝试创建一个查询,以获取每台设备的最后一次软件使用时间的结果。

表格中有文件名列和每个设备的开始时间。我遇到的问题是我只关心每个设备的最新开始时间,但由于多个记录的开始时间,该表将有多行。有没有办法只能根据设备名称获得不同的结果?我可以按开始时间对它们进行排序,然后按设备名称对其进行排序,但我想删除每台机器的重复行。我看过类似的帖子,这些帖子使用带有row_number() (order by sud.StartTimeLocal) as rn 的子选择,但是当我尝试这个时,它只返回了一行。我正在为报告创建此内容,并且希望找到一种方法只返回每台机器的最新时间行,而不是尝试在报告中对它们进行分组。
这是我的查询:

declare @ProductName as nvarchar(250) = 'Visio'

select
sy.resourceid,
sy.name0 as 'DeviceName',
sud.FileName,
sud.FileDescription,
case
    substring(sud.FileVersion,1,2)
    when '16' then (Sud.FileDescription + ' 2016')
    when '15' then (Sud.FileDescription + ' 2013')
    when '14' then (Sud.FileDescription + ' 2010')
    end as 'Product',
sud.FileVersion,
sud.StartTimeLocal as 'LastExecuted'

from v_R_system sy
left join v_GS_SoftwareUsageData sud on sy.ResourceID = sud.ResourceID
where sud.FileName in (
 (@ProductName + '.EXE')
 )
and sud.StartNotCaptured != 1

order by sud.StartTimeLocal desc,sud.FileName,sy.Name0

这是我得到的结果示例

DeviceName      FileName    FileDescription Product                 FileVersion      LastExecuted
Machine Name1   VISIO.EXE   Microsoft Visio Microsoft Visio 2016    16.0.4993.1001      4/29/2020 10:07
Machine Name1   VISIO.EXE   Microsoft Visio Microsoft Visio 2016    16.0.4993.1001      4/29/2020 10:07
Machine Name2   VISIO.EXE   Microsoft Visio Microsoft Visio 2016    16.0.4954.1000      4/28/2020 11:01
Machine Name3   VISIO.EXE   Microsoft Visio Microsoft Visio 2016    16.0.11929.20648    4/28/2020 8:46
Machine Name3   VISIO.EXE   Microsoft Visio Microsoft Visio 2016    16.0.11929.20648    4/27/2020 16:20
Machine Name3   VISIO.EXE   Microsoft Visio Microsoft Visio 2016    16.0.11929.20648    4/27/2020 16:15
Machine Name3   VISIO.EXE   Microsoft Visio Microsoft Visio 2016    16.0.11929.20648    4/27/2020 15:25
Machine Name3   VISIO.EXE   Microsoft Visio Microsoft Visio 2016    16.0.11929.20648    4/27/2020 12:30
Machine Name3   VISIO.EXE   Microsoft Visio Microsoft Visio 2016    16.0.11929.20648    4/27/2020 11:51
Machine Name3   VISIO.EXE   Microsoft Visio Microsoft Visio 2016    16.0.11929.20648    4/27/2020 11:34
Machine Name3   VISIO.EXE   Microsoft Visio Microsoft Visio 2016    16.0.11929.20648    4/27/2020 8:04

【问题讨论】:

  • 请显示样本数据和所需结果。您的问题很清楚,但不清楚您的查询与它有什么关系。

标签: sql sql-server distinct


【解决方案1】:

如果我不得不推测,您需要来自v_GS_SoftwareUsageData 的匹配行用于第一个表中的每一行。可能最好的方法是cross apply

select sy.resourceid, sy.name0 as DeviceName, sud.FileName, sud.FileDescription,
       (case left(sud.FileVersion,2)
            when '16' then (Sud.FileDescription + ' 2016')
            when '15' then (Sud.FileDescription + ' 2013')
            when '14' then (Sud.FileDescription + ' 2010')
        end) as Product,
       sud.FileVersion,
       sud.StartTimeLocal as LastExecuted
from v_R_system sy cross apply
     (select top (1) sud.*
      from v_GS_SoftwareUsageData sud 
      where sy.ResourceID = sud.ResourceID and
            sud.FileName = @ProductName + '.EXE' and
            sud.StartNotCaptured <> 1
      order by sud.StartTimeLocal desc, sud.FileName
     ) sud;

【讨论】:

  • 谢谢,看起来很完美。我需要仔细检查其中的一些是否是最新的时间,但每台机器我只得到一个结果。我不知道交叉申请是否存在,我将不得不查一下。如果我不清楚我不太清楚我想要什么,请道歉。
猜你喜欢
  • 2011-12-11
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2019-06-10
  • 2018-11-28
相关资源
最近更新 更多