我有以下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