Получить последнюю строку в 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
Другие вопросы по тегам