如果資料點的數量超過 50,我很難創建一個 SQLite 命令,該命令將根據時間回傳均勻分布的資料點。
基本上,我每 30 秒存盤一次資料。但是,如果我想查看最后一小時的資料,那將是非常大量的資料,并且最終會凍結我的 RPI,因為它試圖可視化這些資料。因此,我的解決方案是創建一個 SQLite 命令,它將回傳資料點的數量限制為 50 個,這些資料點均勻分布在一個時間范圍內。
如果我想要最后一分鐘、5 分鐘、10 分鐘等,我有單獨的命令。一旦超過 1 小時,我需要限制資料,以便我可以將其硬編碼到命令中(不需要 IF 陳述句)
這是我目前對不起作用的命令的嘗試:
select Voltage from Battery2 where Timestamp >= Datetime('now', '-1 hour') % (SELECT COUNT(*)/50 FROM Battery2)=0;
這是基于此堆疊溢位帖子:How to select fixed number of evenly spread rows in timeseries sqlite database
編輯:
以下是函式輸出的一些示例資料:
Voltage: 54
Timestamp: "2022-01-13 16:47:47"
Voltage: 54
Timestamp: "2022-01-13 16:48:18"
Voltage: 54
Timestamp: "2022-01-13 16:48:49"
uj5u.com熱心網友回復:
您可以使用NTILE()視窗函式根據列將結果集分為 50 個組,Timestamp然后使用聚合從每個組中選擇 1 行,使用MAX()或MIN()聚合函式:
WITH cte AS (
SELECT *, NTILE(50) OVER (ORDER BY Timestamp) nt
FROM Battery2
WHERE Timestamp >= datetime('now', '-1 hour')
)
SELECT MAX(Timestamp) AS Timestamp, Voltage
FROM cte
GROUP BY nt;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/412850.html
標籤:
上一篇:為什么Pandasto_datetime()函式在同一資料系列(YYYY-DD-MM)和(YYYY-MM-DD)中以兩種不同格式回傳(DD-MM-YYYY)日期時間?
下一篇:計算給定資料集的時間差
