我有一张股票报价表,看起来像这样:
id,date,stock_id,value
每个stock_id每天都有几行(它每五分钟自动更新一次),所以目前这个表格相当大。
如何为每个stock_id删除每一行,但每天最后一行?
答案 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));