创建一个SQLite查询

时间:2019-12-20 17:41:49

标签: sqlite

我有一个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日

1 个答案:

答案 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;

DB-fiddle