有类似的(ish)问题,但这有点具体......
我有10种不同的传感器。我想只保留每个传感器的最新5个读数。 我遇到的问题是,当它达到5个读数时,它将删除该特定传感器的所有读数,然后再次开始填充,直到它再次达到5 ......等等。 在达到5个读数时,我希望它只是"替换"最新的,最新的。已经有一段时间了,无法理解它。我更喜欢一种相当容易理解的方法,因为这是为了帮助一些正在创建学校项目的孩子。 感谢。
这是迄今为止的基本代码......
cursor = db.cursor()
cursor.execute("DELETE FROM readings WHERE Sensor IN (SELECT Sensor FROM readings WHERE Sensor = '%s' GROUP BY Sensor HAVING COUNT(Sensor)>5 and MIN(Timestamp))" % sensorName)
db.commit()
PS:我明白为什么它不起作用 - 因为SELECT语句只会在计数大于5时选择任何东西,然后它会删除所有的读数传感器,但我不知道如何让它只选择最旧的,然后删除它。
答案 0 :(得分:1)
我认为这种方法适用于SQLite:
delete from readings
where sensor = '%s' and
timestamp not in (select r2.timestamp
from readings r2
where r2.sensor = readings.sensor
order by timestamp
limit 5
);