2011-08-30 37 views
0

假设我有以下架构表:旋转用户统计

int pitchId, int pitcherId, int pitchType, timestamp pitchTimeStamp 

,我们跟踪的每一个音调有投手投的。现在让我们来说说,我只想包括最后100个音高,并清除除了最后100个音高以外的任何其他音高(pitcherId)。我知道一种可能的解决方案是循环遍历PHP中的每个pitcherId,并且在过去为该pitcherId找到第100个pitchId并删除比这更早的任何东西。

但是,我认为必须有一个更有效的方法来做到这一点,无论是通过存储过程还是在我的脑海里,最好是触发器。

谢谢!

回答

1

您可以使用像这样的SQL语句。

DELETE FROM pitch p 
WHERE NOT (p.pitchid IN 
      (SELECT p2.pitchid FROM pitchid p2 ORDER BY p2.pitchid DESC LIMIT 100)) 
+0

看起来不错!甚至不能相信我没有想到一个子选择,但会不会回答这个问题,看看其他人是否有其他建议。 – ajacian81

+1

这会不会删除所有投球,而是100个投手_而不是100个投手? –

+0

其实是的,但我想我可以在p.pitcherId = p2.pitcherId上加入p和p2。 – ajacian81