我有一个日志表,每行代表一个记录其状态的对象。每个对象都有一个唯一的,不变的GUID。有多个对象记录其状态,因此将有数千个条目,对象不断插入新日志。每次对象检入时,都是通过INSERT。
我在tblObjects中有PrimaryKey,GUID,ObjectState和LogDate列。我想从tblObjects为每个唯一的GUID选择最新的(按日期时间)日志条目,实际上是所有对象的“快照”。
如何实现这一目标?
答案 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