我有此表box
,其中包含以下条目:
eventid | uuid | rack
---------+------+----
0 | 0 | r1
1 | 1 | r2
2 | 0 | r2
其中uuid是恒定的,每次发生在特定盒子上的更新都会添加一个带有新事件ID的新事件,但uuid仍然存在。
我想做的是找出一种根据特定机架获得最新版盒子的方法。
当我搜索机架r2时,我需要eventid 2和1,而当我搜索机架r1时,我什么也不想找到。
到目前为止,我有以下查询:
select distinct on (uuid) *
from dbo.box as t
where t ==> 'r2'
order by t.uuid, t.eventid DESC;
哪个返回r2的正确数据,但是如果我将此查询与r1一起使用,当我什么都不想要时,我将得到eventId 0。
我假设您需要为此进行某种子查询,以基于事件ID获取所有最新版本的uuid,然后执行where子句,但我不太熟悉Postgres,所以如果任何人都可以帮助我,我将非常感激。
答案 0 :(得分:0)
好吧,我没有您的扩展运算符(==>现在我需要了解它的操作)。因此,我无法测试以下内容,但可能值得尝试。您可以在where子句中添加NOT EXISTS谓词。
select distinct on (uuid) *
from dbo.box as t
where t ==> 'r2'
and not exists
(select null
from dbo.box nt
where nt.uuid = t.uuid
and nt.eventid > t.eventid
)
order by t.uuid, t.eventid DESC;
关于您的评论,我不确定它是否有意义。