SQL获取最新的独特行

时间:2010-04-24 01:34:28

标签: sql sql-server tsql

我有一个日志表,每行代表一个记录其状态的对象。每个对象都有一个唯一的,不变的GUID。有多个对象记录其状态,因此将有数千个条目,对象不断插入新日志。每次对象检入时,都是通过INSERT。

我在tblObjects中有PrimaryKey,GUID,ObjectState和LogDate列。我想从tblObjects为每个唯一的GUID选择最新的(按日期时间)日志条目,实际上是所有对象的“快照”。

如何实现这一目标?

2 个答案:

答案 0 :(得分:3)

您可以使用子查询来过滤最后的日志条目:

select t1.*
from tblObjects t1
where t1.LogDate = (
    select max(LogDate) 
    from tblObjects t2
    where t1.guid = t2.guid
)

或者,使用不存在:

select t1.*
from tblObjects t1
where not exists (
    select *
    from tblObjects t2
    where t1.guid = t2.guid
    and t1.LogDate < t2.LogDate
)

注意,通常的方法是存储指示行是否是当前的位标志。这样可以让您更快地查询。

答案 1 :(得分:0)

听起来您想为每个GUID选择最新的LogDate。使用带有 max 功能的“分组依据”可以满足您的需求:

Select *, max(LogDate)
From tblObjects
Group By GUID