我有以下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的存在与比较时间戳对象问题: 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查询
注意:Postgres中没有DATETIME类型,你可能是指TIMESTAMP。 – 2010-05-11 08:28:54
好点:) 应该是“没有时区的时间戳” 会编辑它 – pingi 2010-05-11 09:06:12
什么是“比较时间戳对象的问题”? – araqnid 2010-05-11 09:58:34