Выбор всех соответствующих полей с помощью MAX и GROUP BY
У меня есть эта таблица:
![alt text]()
И я хотел бы сделать запрос, который будет возвращать для каждой deal_id
строку с наивысшим timestamp
, и соответствующим status_id
.
Итак, для этого примера я бы вернул 2 строки:
1226, 3, 2009-08-18 12:10:25
1227, 2, 2009-08-17 14:31:25
Я попытался сделать это с помощью этого запроса
SELECT deal_id, status_id, max(timestamp) FROM deal_status GROUP BY deal_id
но он вернет неправильный status_id
:
1226, 1, 2009-08-18 12:10:25
1227, 1, 2009-08-17 14:31:25
Ответы
Ответ 1
без единого поля первичного ключа, я думаю, что ваш лучший выбор:
select * from deal_status
inner join
(select deal_id as did, max(timestamp) as ts
from deal_status group by deal_id) as ds
on deal_status.deal_id = ds.did and deal_status.timestamp = ds.ts
это все равно не будет работать, если вы позволите одновременно иметь два разных состояния для одного и того же продукта.
Ответ 2
Привет, надеюсь, это даст то, что вам нужно.
select deal_id,status_id, timestamp from deal_status
inner join
(select deal_id as did,max(timestamp) as ts
from deal_status group by deal_id )as ds
on deal_status.deal_id = ds.did and deal_status.timestamp = ds.ts order by deal_id