一尘不染

如何在具有 3 列的表中获取最大行

sql

我正在运行 Microsoft SQL Server 2014 - 12.0.4213.0 (X64)。

(道歉 - 我是新手,我知道我正在运行旧版本)

我有下表:

ID Name Time
1 Finished 2022-07-13 17:09:48.0000000
1 Start 2022-07-13 17:00:48.0000000
2 Clean 2022-07-13 15:09:48.0000000
2 Waiting 2022-07-13 17:34:48.0000000
2 Clean 2022-07-13 12:09:48.0000000
3 Start 2022-07-12 18:09:48.0000000
3 Middle 2022-07-12 14:09:48.0000000
3 Middle 2022-06-13 17:09:48.0000000

我想返回一个组,该组将显示每个 ID 号的最大时间,但也返回该Name最大行的值。

我可以做一个

SELECT
    ID, MAX(Time)
FROM
    ...
WHERE
    ...
GROUP BY
    (ID)

但我也需要加入Name专栏。我只希望每个 ID 一行返回该 ID 的最大时间,以及Name与该时间和 ID 号相关联

任何帮助都会非常感谢


阅读 90

收藏
2022-07-20

共1个答案

一尘不染

这种事情已经被问过很多次了,但找到正确的搜索词可能是一项挑战。以下是如何使用示例数据解决此问题。

declare @Something table
(
    ID int
    , Name varchar(20)
    , Time datetime2
)

insert @Something values
(1, 'Finished', '2022-07-13 17:09:48.0000000')
, (1, 'Start', '2022-07-13 17:00:48.0000000')
, (2, 'Clean', '2022-07-13 15:09:48.0000000')
, (2, 'Waiting', '2022-07-13 17:34:48.0000000')
, (2, 'Clean', '2022-07-13 12:09:48.0000000')
, (3, 'Start', '2022-07-12 18:09:48.0000000')
, (3, 'Middle', '2022-07-12 14:09:48.0000000')
, (3, 'Middle', '2022-06-13 17:09:48.0000000')

select ID
    , Name
    , Time
from
(
    select *
        , RowNum = ROW_NUMBER()over(partition by s.ID order by s.Time desc)
    from @Something s
) x
where x.RowNum = 1
2022-07-20