update row if count(*) > n
我的DB有这样的结构:
这是我目前的代码。 我正试图找到一种方法来做一个查询。
1 2 3 4 5 6 7 8 |
我正在检查给定ID存在多少行。 然后我需要为n> 3的所有行设置valid = -1;
有没有办法用一个查询来做到这一点?
您可以在
1 2 3 4 5 6 7 8 |
子查询计算具有相同ID和更晚时间的行。 对于最近的三行,此计数将为三或更少; 其余的将有更多的计数,因此他们的
假设
1 2 3 4 5 6 7 8 9 10 11 12 13 |
1 2 3 4 5 6 7 |
更新:我真的很喜欢dasblinkenlight的解决方案,因为它很整洁,但我想尝试以我的方式做到这一点,一个相当冗长的解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
也在SQLFiddle中
为所有id执行此操作,或者仅在子查询中设置where时执行一次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | UPDATE TABLE LEFT JOIN ( SELECT * FROM ( SELECT @rn:=if(@prv=id, @rn+1, 1) AS rId, @prv:=id AS id, TABLE.* FROM TABLE JOIN ( SELECT @prv:=0, @rn:=0 ) tmp ORDER BY id, TIMESTAMP ) a WHERE rid > 3 ) ordered ON ordered.id = TABLE.id AND ordered.TIMESTAMP = TABLE.TIMESTAMP AND ordered.text = TIMESTAMP.text SET VALID = -1 WHERE rid IS NOT NULL |