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