删除所有行按 strftime 每小时只保留一行
delete all rows keep only one per hour group by strftime
我有一个 Home Assistant sqlite 文件。
我的问题是它长得很快并且达到了巨大的尺寸。
所以我制作了一个 php 脚本,每 24 小时清理一次。
我删除旧的和不相关的数据,只留下我需要的数据。
此外,我想优化我为每个传感器留下的数据,每小时删除一个值以外的所有数据,它将为我提供所有图表所需的信息并减小文件大小。
我正在考虑使用 not in
选项并编写了以下命令:
DELETE from states where state_id not in (select state_id, strftime ('% Y-% m-% d% H', last_changed, 'localtime') as date_hour from states group by entity_id, date_hour);
我按传感器 ID 以及时间和日期对所有传感器进行排序,并每小时删除一个除外的所有传感器。
但是当我 运行 命令时,我得到了:
Error: only a single result allowed for a SELECT that is part of an expression
因为我无法删除 date_hour 列,你们认为我应该怎么做?
谢谢!
子查询 returns 2 列,因此您必须将 2 列与其结果进行比较:
DELETE FROM states
WHERE (entity_id, last_changed) NOT IN (
SELECT entity_id, MAX(last_changed)
FROM states
GROUP BY entity_id, strftime('%Y-%m-%d% %H', last_changed)
);
参见demo。
我有一个 Home Assistant sqlite 文件。
我的问题是它长得很快并且达到了巨大的尺寸。 所以我制作了一个 php 脚本,每 24 小时清理一次。 我删除旧的和不相关的数据,只留下我需要的数据。
此外,我想优化我为每个传感器留下的数据,每小时删除一个值以外的所有数据,它将为我提供所有图表所需的信息并减小文件大小。
我正在考虑使用 not in
选项并编写了以下命令:
DELETE from states where state_id not in (select state_id, strftime ('% Y-% m-% d% H', last_changed, 'localtime') as date_hour from states group by entity_id, date_hour);
我按传感器 ID 以及时间和日期对所有传感器进行排序,并每小时删除一个除外的所有传感器。
但是当我 运行 命令时,我得到了:
Error: only a single result allowed for a SELECT that is part of an expression
因为我无法删除 date_hour 列,你们认为我应该怎么做? 谢谢!
子查询 returns 2 列,因此您必须将 2 列与其结果进行比较:
DELETE FROM states
WHERE (entity_id, last_changed) NOT IN (
SELECT entity_id, MAX(last_changed)
FROM states
GROUP BY entity_id, strftime('%Y-%m-%d% %H', last_changed)
);
参见demo。