gpt4 book ai didi

sql - T-SQL 查询 : Select only the most recent row (for each computer name)

转载 作者:行者123 更新时间:2023-12-05 08:21:07 26 4
gpt4 key购买 nike

我在 SQL Server 2014 Developer Edition 数据库中有一个名为 ComputerStatus 的表,如下所示:

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

我想要做的是获取每个唯一计算机名称的最新(基于 Timestamp)行。尽管我对 SQL Server 查询相当业余,但我知道我可以:

  • 编写一个检索最近条目的存储过程(针对单台计算机),然后使用游标多次调用该过程
  • 使用以下 T-SQL 代码(在存储过程中)检索最新行:select top 1 * from ComputerStatus where ComputerName = 'client01' order by Timestamp descending

期望的结果

ComputerName       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

我知道如何为单台计算机选择最近的行。我正在努力解决的部分是如何为表中所有独特的计算机执行此操作。这是否需要我使用 SQL 游标来遍历表中的唯一计算机名称?或者,是否有更有效的方法来实现这些结果?

最佳答案

您可以使用 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

MSDN

关于sql - T-SQL 查询 : Select only the most recent row (for each computer name),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23015312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com