Получить последнюю строку в MySQL с общим первичным ключом
У меня есть таблица с первичным ключом 2 значения - идентификатор и отметка времени. Таблица содержит несколько строк для каждого item_id, и отметка времени должна сделать его уникальным. Могу ли я выполнить эффективный запрос с учетом этой настройки? Я хочу найти последнее появление item_id. Есть идеи?
CREATE TABLE IF NOT EXISTS table (
item_id varchar(30) NOT NULL,
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
...
PRIMARY KEY (item_id, ts)
);
2 ответа
Решение
Ты имеешь ввиду MAX()
?
SELECT item_id, MAX(ts) as TS
FROM `table`
GROUP BY item_id
Однако, если вы хотите получить все столбцы на основе последних item_id
Вы можете поместить этот запрос в подзапрос и присоединить его к самой таблице:
SELECT a.*
FROM `table` a
INNER JOIN
(
SELECT item_id, MAX(ts) as TS
FROM `table`
GROUP BY item_id
) b ON a.item_id = b.item_id
AND a.ts = b.TS
Вы можете передать item_id в переменную или установить его непосредственно в запросе, и если у вас есть индекс для таблицы, содержащей оба поля, оптимизатор запросов будет использовать ее и предоставит вам самую последнюю запись для item_id:
SET @ID := 10;
SELECT item_id, ts
FROM table
WHERE item_id = @ID
ORDER BY item_id,ts DESC
LIMIT 1