DELETE FROM member_logins
WHERE id in(
SELECT ID
FROM (SELECT
ID,member_id,
IF(@prev <> member_id, @rownum := 1, @rownum := @rownum+1) AS rank,
@prev := member_id,date_created
FROM member_logins t
JOIN (SELECT @rownum := NULL, @prev := 0) AS r
ORDER BY t.member_id,t.date_created desc) as tmp
where tmp.rank > 2)
修復查詢。測試樣本數據,它適用於我。
示例數據我加載用於測試
id member_id date_created
1 1 2/26/2011 12:00:00 AM
2 1 5/26/2011 12:00:00 AM
3 1 4/26/2011 12:00:00 AM
4 2 5/26/2011 12:00:00 AM
5 2 3/26/2011 12:00:00 AM
6 2 4/26/2011 12:00:00 AM
代替50,我有在查詢頂部2行進行測試。
所以我的查詢應該刪除每個member_id組中的所有行級別大於2的所有行,其中行按date_created desc排序。運行刪除查詢後
輸出:
id member_id date_created
2 1 5/26/2011 12:00:00 AM
3 1 4/26/2011 12:00:00 AM
4 2 5/26/2011 12:00:00 AM
6 2 4/26/2011 12:00:00 AM
你可以看到ID爲1和5的行刪除了。這些是在每個member_id組具有秩> 2的行
這不適合我。我在SELECT COUNT(*)FROM member_logins WHERE member_id = 1的表上測試,返回80+行,但運行查詢顯示0行受到影響。我甚至將DELETE更改爲SELECT,並返回0行。 – mellowsoon
修復了查詢。現在工作 – 2011-07-26 13:49:13