SQLite限制为每个传感器5个记录,用最新的替换最旧的

时间:2015-12-27 19:08:12

标签: sql sqlite

有类似的(ish)问题,但这有点具体......

我有10种不同的传感器。我想只保留每个传感器的最新5个读数。 我遇到的问题是,当它达到5个读数时,它将删除该特定传感器的所有读数,然后再次开始填充,直到它再次达到5 ......等等。 在达到5个读数时,我希望它只是"替换"最新的,最新的。已经有一段时间了,无法理解它。我更喜欢一种相当容易理解的方法,因为这是为了帮助一些正在创建学校项目的孩子。 感谢。

这是迄今为止的基本代码......

Python / SQL代码块,用于删除给定传感器的最旧条目并插入新条目(如果大于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时选择任何东西,然后它会删除所有的读数传感器,但我不知道如何让它只选择最旧的,然后删除它。

1 个答案:

答案 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
                           );