我有一个SQLite数据库,我想创建一个查询来对DateTime是否在60分钟之内进行记录分组-困难的部分是DateTime是累积的,所以如果我们有3条记录与DateTimes 2019-12-14 15: 40:00、2019-12-14 15:56:00和2019-12-14 16:55:00它将全部归为一组。请查看查询的内容和期望的输出,以帮助您了解要求。
数据库表“手”
ID DateTime 结果
1 2019年12月14日15:40:00-100
2 2019年12月14日15:56:00 1000
3 2019年12月14日16:55:00 -2000
4 2012-01-12 12:00:00 400
5 2016-10-01 21:00:00 900
6 2016-10-01 20:55:00 1000
所需的查询输出
开始时间
计数 结果
2019-12-14 15:40:00-3 -1100
2012-01-12 12:00:00 1
2016-10-01 20:55:00 1900年2月2日
答案 0 :(得分:0)
您可以使用一些窗口功能来指示新组应从哪条记录开始(由于与前一个的日期时间差为60分钟或更大),然后将该信息转换为唯一的组号。最后,您可以按该组号分组并对其执行汇总功能:
with base as (
select DateTime, Result,
coalesce(cast((
julianday(DateTime) - julianday(
lag(DateTime) over (order by DateTime)
)
) * 24 >= 1 as integer), 1) as firstInGroup
from Hands
), step as (
select DateTime, Result,
sum(firstInGroup) over (
order by DateTime rows
between unbounded preceding and current row) as grp
from base
)
select min(DateTime) DateTime,
count(*) Count,
sum(Result) Result
from step
group by grp;