如何删除每天除最后一行以外的每一行?

时间:2010-05-07 18:19:05

标签: sql mysql

我有一张股票报价表,看起来像这样:

id,date,stock_id,value

每个stock_id每天都有几行(它每五分钟自动更新一次),所以目前这个表格相当大。

如何为每个stock_id删除每一行,但每天最后一行?

2 个答案:

答案 0 :(得分:10)

其他答案并不确保每天stock_id至少保留一条记录。以下应该做你想做的事。

DELETE FROM StockQuotes
WHERE id NOT IN (
    SELECT MAX(id)
    FROM StockQuotes
    GROUP BY stock_id, DATE(`date`)
)

假设id是一个按顺序自动编号的字段,而date是一个至少包含日期的日期时间字段,但我也包含小时,分钟,秒等。

答案 1 :(得分:3)

我认为这会做你想做的事情:

DELETE FROM STOCK_QUOTES
  WHERE ID NOT IN (SELECT MAX(ID) AS ID
                     FROM STOCK_QUOTES
                     GROUP BY DATE, STOCK_ID));