SQLite 将大量行平均为两个所需行之间的 X 平均值
SQLite averaging lot of rows into X averaged value between two desired row
我在 SQLite 中有行,比如说 10.0000,最后一行作为 unix 时间戳。我想将今天 00:00 到 23:59 的每个值平均到 X 平均组中。如果今天有 1000 条记录且 X 为 10,则对每 100 个值求平均值,结果将是 100 条记录的 10 倍平均值。如果 x 为 20,则对每个值进行平均,结果为平均值 50x。 这些值来自传感器,例如温度,我希望能够跟踪今天 X 小时和 Y 小时等每天的温度。
最有效的方法是什么?我将 SQLite3 与 C++ 一起使用,我可以在 C++ 中使用更多查询来完成它,但我想让它进入 SQLite 并仅在可能的情况下获取结果。可视化:https://i.ibb.co/grSTgrZ/sqlite.png
感谢任何帮助,我应该从这里开始。
谢谢。
您可以使用 NTILE()
window 函数创建您将聚合的组:
SELECT AVG(value) avg_value
FROM (
SELECT *, NTILE(3) OVER (ORDER BY id) grp
FROM tablename
)
GROUP BY grp
NTILE()
括号内的数字对应您要求的数字X。
Id
是 table 应该排序的列。
如果您有 date
列,则更改为:
SELECT AVG(value) avg_value
FROM (
SELECT *, NTILE(3) OVER (ORDER BY date) grp
FROM tablename
)
GROUP BY grp
查看简化版 demo.
我在 SQLite 中有行,比如说 10.0000,最后一行作为 unix 时间戳。我想将今天 00:00 到 23:59 的每个值平均到 X 平均组中。如果今天有 1000 条记录且 X 为 10,则对每 100 个值求平均值,结果将是 100 条记录的 10 倍平均值。如果 x 为 20,则对每个值进行平均,结果为平均值 50x。 这些值来自传感器,例如温度,我希望能够跟踪今天 X 小时和 Y 小时等每天的温度。
最有效的方法是什么?我将 SQLite3 与 C++ 一起使用,我可以在 C++ 中使用更多查询来完成它,但我想让它进入 SQLite 并仅在可能的情况下获取结果。可视化:https://i.ibb.co/grSTgrZ/sqlite.png
感谢任何帮助,我应该从这里开始。
谢谢。
您可以使用 NTILE()
window 函数创建您将聚合的组:
SELECT AVG(value) avg_value
FROM (
SELECT *, NTILE(3) OVER (ORDER BY id) grp
FROM tablename
)
GROUP BY grp
NTILE()
括号内的数字对应您要求的数字X。
Id
是 table 应该排序的列。
如果您有 date
列,则更改为:
SELECT AVG(value) avg_value
FROM (
SELECT *, NTILE(3) OVER (ORDER BY date) grp
FROM tablename
)
GROUP BY grp
查看简化版 demo.