如何用SQLite查询按固定时间间隔统计指定区间数值总和
SQLite按固定时间间隔分组统计Col3总和问题
现有表结构及数据如下:
| Col1 | Col2 | Col3 |
|---|---|---|
| 22:04:02 | 22:04:12 | 8 |
| 22:04:12 | 22:04:22 | 22 |
| 22:04:22 | 22:04:32 | 10 |
| 22:04:32 | 22:04:42 | 9 |
| 22:04:42 | 22:04:52 | 92 |
| 22:04:52 | 22:05:02 | 14 |
| 22:05:02 | 22:05:12 | 88 |
| 22:05:12 | 22:05:22 | 24 |
| 22:05:22 | 22:05:32 | 30 |
需求是统计Col1 >= '22:04:02'且Col2 <= '22:05:02'范围内,按20秒间隔分组的Col3总和,期望结果为:
| Time | Sum |
|---|---|
| 22:04:22 | 30 |
| 22:04:42 | 19 |
| 22:05:02 | 106 |
尝试的SQL语句:
SELECT SUM(Col3) AS duomenys FROM myTable WHERE Col1 >= '22:04:02' AND Col2 <= '22:05:02' GROUP BY Time(Col1, '+20 seconds')
该语句返回的是区间内Col3的全部总和155,未实现正确分组。
修正后的SQL语句
SELECT TIME(Col1, '-' || (STRFTIME('%S', Col1) % 20) || ' seconds', '+20 seconds') AS Time, SUM(Col3) AS Sum FROM myTable WHERE Col1 >= '22:04:02' AND Col2 <= '22:05:02' GROUP BY Time ORDER BY Time;
说明
原语句的分组逻辑未将时间对齐到20秒间隔的边界,导致分组失效。修正后的逻辑:
- 通过
STRFTIME('%S', Col1) % 20计算当前时间秒数与20秒间隔的偏移量 - 减去偏移量将时间对齐到最近的20秒间隔起点,再加20秒得到分组标识时间(与期望结果的Time列匹配)
- 按对齐后的时间分组求和,最终得到符合要求的20秒间隔统计结果
内容的提问来源于stack exchange,提问作者DeFacto
相关产品推荐
相关产品推荐

