我有一个包含这样的列的表:
id timestamp content
其中ID是字符串,时间戳是DEFAULT CURRENT_TIMESTAMP
。
id
和timestamp
一起制作复合键,因此您可以选择最新的列,例如:
select * from table where id = 'text-here' order by timestamp desc limit 1
我现在有一个问题,我想删除除id
的最新条目以外的所有条目,但我不知道如何执行此操作。如果它有一个自动递增的主键,我可以使用子查询来选择要保留的那些并使用NOT IN
,这在很多问题上都有说明,但是我不知道如何用复合键。
答案 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
删除除最新记录以外的所有记录。
答案 1 :(得分:3)
没有子查询也是可能的:
DELETE t
FROM t
JOIN t AS t2 ON t.timestamp < t2.timestamp AND t.id = t2.id;