我有一个ComputerStatusSQL Server 2014 Developer Edition数据库中的表,如下所示:
ComputerName Status Timestamp
------------ ----------- ------------
client01 Online 2013-04-11 11:00 AM
client01 Online 2013-04-08 10:00 AM
client01 Offline 2013-04-05 09:00 PM
client02 Offline 2013-04-08 10:00 AM
client02 Online 2013-04-03 10:00 AM
client03 Online 2013-04-02 10:00 AM
client03 Offline 2013-04-05 10:00 PM
client03 Online 2013-04-03 12:00 PM
Run Code Online (Sandbox Code Playgroud)
我想要做的是获取Timestamp每个唯一计算机名称的最新(基于)行.虽然我对SQL Server查询非常讨厌,但我知道我可以:
select top 1 * from ComputerStatus where ComputerName = 'client01' order by Timestamp descendingComputerName Status Timestamp
------------ ----------- ------------
client01 Online 2013-04-11 11:00 AM
client02 Offline 2013-04-08 10:00 AM
client03 Offline 2013-04-05 10:00 PM
Run Code Online (Sandbox Code Playgroud)
我知道如何为一台计算机选择最新的行.我正在努力解决的部分是如何为表中所有独特的计算机执行此操作.这是否需要我使用SQL游标来迭代表中的唯一计算机名称?或者,是否有更有效的方法来实现这些结果?
您可以使用RowNumber执行此操作,RowNumber为每行提供行号.由于您希望基于TimeStamp为每个computerName提供从1开始的行号,我们需要通过Computername对其进行分区
select * from (
select *, ROW_NUMBER() over (partition by ComputerName order by Timestamp desc) as rno
from ComputerStatus
) as T where rno = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
812 次 |
| 最近记录: |