MySQL - 使用复合键

时间:2015-09-24 17:52:39

标签: mysql

我有一个包含这样的列的表:

id timestamp content

其中ID是字符串,时间戳是DEFAULT CURRENT_TIMESTAMP

idtimestamp一起制作复合键,因此您可以选择最新的列,例如:

select * from table where id = 'text-here' order by timestamp desc limit 1

我现在有一个问题,我想删除除id的最新条目以外的所有条目,但我不知道如何执行此操作。如果它有一个自动递增的主键,我可以使用子查询来选择要保留的那些并使用NOT IN,这在很多问题上都有说明,但是我不知道如何用复合键。

2 个答案:

答案 0 :(得分:3)

以下查询:

# Example README.Rmd

Here's a branch specific shield:

[![Build Status](https://travis-ci.org/RevolutionAnalytics/miniCRAN.svg?branch=master)](https://travis-ci.org/RevolutionAnalytics/miniCRAN)

DELETE mytable FROM mytable INNER JOIN (SELECT id, MAX(`timestamp`) AS `timestamp` FROM mytable GROUP BY id) AS t ON mytable.id = t.id AND mytable.`timestamp` < t.`timestamp` id删除除最新记录以外的所有记录。

Demo here

答案 1 :(得分:3)

没有子查询也是可能的:

DELETE t
FROM t
JOIN t AS t2 ON t.timestamp < t2.timestamp AND t.id = t2.id;

http://sqlfiddle.com/#!9/1ff88/1