2011-08-30 26 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