我有一個家庭助理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 列,你們認為我應該怎么做?謝謝!
uj5u.com熱心網友回復:
子查詢回傳 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)
);
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/470347.html
標籤:sqlite 通过...分组 where子句 sql-删除 sql-in
上一篇:SQLITE按順序匯總
