SQL查询-每个唯一列名称的最新行

时间:2018-11-29 22:00:53

标签: sql sql-server

在SQL Server 2016中,说我有一个定义为的简单表:

CREATE TABLE MyTable (
    ID int NOT NULL,
    Timestamp timestamp,
    Category varchar(255),
    Value decimal(10,2),
    PRIMARY KEY (ID) 
);

我正在尝试查找每个唯一类别的最新值。目前,我多次使用以下查询:

SELECT TOP (1) Category, Value FROM MyTable WHERE Category =
'WhateverCategory1' ORDER BY Timestamp DESC

这有效,但是类别需要在查询中进行硬编码。而且,有多个结果集,每个类别一个。我如何在所有相同结果集中找到每个唯一类别的最新值?

1 个答案:

答案 0 :(得分:3)

假设您使用Timestamp作为行创建时间,只需通过最大ID即可获取。

这是不使用a window function的解决方案:

SELECT Y.*
FROM
    (
        SELECT MaxID = MAX(ID)
        FROM MyTable
        GROUP BY Category
    ) AS X
    INNER JOIN MyTable AS Y ON
        Y.ID = X.MaxID