首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅从一列中选择指定的第一行不同的结果

仅从一列中选择指定的第一行不同的结果
EN

Stack Overflow用户
提问于 2020-04-30 20:28:08
回答 1查看 37关注 0票数 0

我正在尝试创建一个查询,该查询将获得每个设备上一次软件使用时间的结果。

表中有文件名的列和每个设备的启动时间。我遇到的问题是,我只关心每个设备的最新启动时间,但是由于多个记录的启动时间,表将有多个行。是否有一种方法只能根据设备名称获得不同的结果?我可以根据启动时间对它们进行排序,然后使用最新的设备名称对其进行排序,但是我希望删除每台机器的重复行。我看过与row_number() (order by sud.StartTimeLocal) as rn一起使用子subselect的类似帖子,但当我尝试使用它时,它只返回一行。我正在为报表创建这个选项,我更希望找到一种方法,只返回每台机器的最新时间,而不是在报表中对它们进行分组。

下面是我的查询:

代码语言:javascript
运行
复制
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

下面是我得到的结果的一个例子

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-30 20:32:05

如果我不得不推测,您需要从v_GS_SoftwareUsageData中为第一个表中的每一行提供一个匹配行。也许最好的方法是cross apply

代码语言:javascript
运行
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61532164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档