У меня есть следующие 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 (номер)»
Есть мысли как сделать лучше? Спасибо.
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-запроса