-2
如何删除比第一行早但第五行开始的所有行(如果存在!)? MySQL数据库的从第五行开始删除比第一行更早的行
布局:
user |post|timestamp
Harry foo 1445275458
(时间戳是CURRENT_TIMESTAMP)
如何删除比第一行早但第五行开始的所有行(如果存在!)? MySQL数据库的从第五行开始删除比第一行更早的行
布局:
user |post|timestamp
Harry foo 1445275458
(时间戳是CURRENT_TIMESTAMP)
鉴于由Drew无耻被盗和扩展该样品数据:
select t1.*, from_unixtime(tstamp) from t1;
| id | fname | lname | tstamp | from_unixtime(tstamp) |
|----|-------|-------|------------|---------------------------|
| 1 | Harry | foo | 1445275458 | October, 19 2015 17:24:18 |
| 2 | Harry | foo | 1445275457 | October, 19 2015 17:24:17 |
| 3 | Harry | foo | 1445275456 | October, 19 2015 17:24:16 |
| 4 | Harry | foo | 1445275455 | October, 19 2015 17:24:15 |
| 5 | Harry | foo | 1445275454 | October, 19 2015 17:24:14 |
| 6 | Harry | foo | 1445275453 | October, 19 2015 17:24:13 |
| 7 | Harry | foo | 1445275452 | October, 19 2015 17:24:12 |
| 8 | Harry | foo | 1345275458 | August, 18 2012 07:37:38 |
| 9 | Harry | foo | 1435275458 | June, 25 2015 23:37:38 |
与此查询
DELETE t1.*
FROM t1
LEFT JOIN (SELECT id FROM t1 ORDER BY tstamp DESC LIMIT 5) q ON t1.id = q.id
WHERE q.id IS NULL
AND t1.tstamp < NOW() - INTERVAL 1 DAY;
你得到以下结果:
select t1.*, from_unixtime(tstamp) from t1;
| id | fname | lname | tstamp | from_unixtime(tstamp) |
|----|-------|-------|------------|---------------------------|
| 1 | Harry | foo | 1445275458 | October, 19 2015 17:24:18 |
| 2 | Harry | foo | 1445275457 | October, 19 2015 17:24:17 |
| 3 | Harry | foo | 1445275456 | October, 19 2015 17:24:16 |
| 4 | Harry | foo | 1445275455 | October, 19 2015 17:24:15 |
| 5 | Harry | foo | 1445275454 | October, 19 2015 17:24:14 |
带电作业如何确定的“第五行”?按时间戳desc排序时它是第五行吗? – JNevill
@JNevill第五行是按时间戳降序排列的第五行 –
因此,您实际上想要做的是删除24小时以后的所有内容,但不管年龄大小,都要确保保留五个最新的条目。 (是24小时,还是'今天<即日'即使只有2个小时?) - 用另一种方式表示......“我总是希望保留今天的五个最新条目和所有条目,删除其他所有条目”。它是否正确? –