从历史记录表中选择最新状态

Com*_*his 10 sql t-sql

我继承了一个结构如下的表:

ID   Name   Timestamp   Data
----------------------------
1    A      40          ...
2    A      30          ...
3    A      20          ...
4    B      40          ...
5    B      20          ...
6    C      30          ...
7    C      20          ...
8    C      10          ...
Run Code Online (Sandbox Code Playgroud)

ID是一个标识字段和主键,在NameTimestamp字段上有非唯一索引.

什么是最有效的方式来获取最新的每个项目名称记录,即在上述行的表1,46,因为它们是项目中最先进的日期项应返回一个,Ç分别.

Mit*_*eat 16

SQL Server 2005(以后):

WITH MostRecentRows AS
(
    SELECT ID, Name, Data,
    ROW_NUMBER() OVER (PARTITION BY Name ORDER BY TimeStamp DESC) AS 'RowNumber'
    FROM MySchema.MyTable
) 
SELECT * FROM MostRecentRows 
WHERE RowNumber = 1
Run Code Online (Sandbox Code Playgroud)


Jon*_*Jon 6

假设每个名称没有重复的时间戳,这样的事情应该有效:

SELECT ID, Name, Timestamp, Data
FROM test AS o
WHERE o.Timestamp = (SELECT MAX(Timestamp)
                     FROM test as i
                     WHERE i.name = o.name)
Run Code Online (Sandbox Code Playgroud)

  • 是的,这只有在没有重复时间戳的情况下才有效.CTE描述肯定更安全,因为它只返回一行. (3认同)