2015-10-19 71 views
-2

如何删除比第一行早但第五行开始的所有行(如果存在!)? MySQL数据库的从第五行开始删除比第一行更早的行

布局:

user |post|timestamp 
Harry foo 1445275458 

(时间戳是CURRENT_TIMESTAMP)

+0

带电作业如何确定的“第五行”?按时间戳desc排序时它是第五行吗? – JNevill

+0

@JNevill第五行是按时间戳降序排列的第五行 –

+0

因此,您实际上想要做的是删除24小时以后的所有内容,但不管年龄大小,都要确保保留五个最新的条目。 (是24小时,还是'今天<即日'即使只有2个小时?) - 用另一种方式表示......“我总是希望保留今天的五个最新条目和所有条目,删除其他所有条目”。它是否正确? –

回答

0

鉴于由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 |