使用共享主键检索mysql中的最后一行

时间:2018-02-02 09:12:36

标签: mysql sql shared-primary-key

我有一个主键为2个值的表 - id和timestamp。 该表包含每个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 个答案:

答案 0 :(得分:0)

您的意思是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

答案 1 :(得分:0)

您可以将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