我有以下 2 个表:
items:
id int primary key
bla text
events:
id_items int
num int
when timestamp without time zone
ble text
composite primary key: id_items, num
并希望为每个项目选择最近的事件(最新的“时间”)。我写了一个请求,但我不知道它是否可以更有效地写出来。
同样在 PostgreSQL 上,比较 Timestamp 对象存在问题: 2010-05-08T10:00:00.123 == 2010-05-08T10:00:00.321 所以我选择 'MAX(num)'
有什么想法可以让它变得更好吗?谢谢。
SELECT i.*, ea.* FROM items AS i JOIN
( SELECT t.s AS t_s, t.c AS t_c, max(e.num) AS o FROM events AS e JOIN
( SELECT DISTINCT id_item AS s, MAX(when) AS c FROM events GROUP BY s ORDER BY c ) AS t
ON t.s = e.id_item AND e.when = t.c GROUP BY t.s, t.c ) AS tt
ON tt.t_s = i.id JOIN events AS ea ON ea.id_item = tt.t_s AND ea.cas = tt.t_c AND ea.num = tt.o;
编辑:有错误的数据,对不起,我的错误,但是感谢您找到更好的 SQL 查询