创建SQLite查询
我有一个SQLite数据库,我想创建一个查询,如果DateTime在60分钟内,它将对记录进行分组-困难的部分是DateTime是累积的,因此如果我们有3条记录,日期时间分别为2019-12-14 15:40:00、2019-12-14 15:56:00和2019-12-14 16:55:00,那么它们都将归入一个组。请参阅查询的手和所需输出,以帮助您理解需求 数据库表“手”创建SQLite查询,sqlite,Sqlite,我有一个SQLite数据库,我想创建一个查询,如果DateTime在60分钟内,它将对记录进行分组-困难的部分是DateTime是累积的,因此如果我们有3条记录,日期时间分别为2019-12-14 15:40:00、2019-12-14 15:56:00和2019-12-14 16:55:00,那么它们都将归入一个组。请参阅查询的手和所需输出,以帮助您理解需求 数据库表“手” ID日期时间结果 12019-12-14 15:40:00-100 22019-12-14 15:56:00100
ID日期时间结果
12019-12-14 15:40:00-100
22019-12-14 15:56:001000
32019-12-14 16:55:00-2000
42012-01-12 12:00:00400
52016-10-01 21:00:00900
62016-10-01 20:55:001000
所需的查询输出
开始时间计数结果
2019-12-14 15:40:003-1100
2012-01-12 12:00:001400
2016-10-01 20:55:0021900
您可以使用一些窗口功能来指示新组应该从哪个记录开始(因为与上一个记录的日期时间差为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;
如果有另一行,结果会是什么:
2016-13-01 21:59:00 100
?上一个日期21:00:00和21:59:00之间的差值为59分钟,因此它属于该范围,因此将被包括在内。结果会改变(增加100)2016-13-01 20:55:00 2000至少确定你的日期。没有第13个月。我已经确定了日期,谢谢你指出。谢谢。这是预期的工作,我想我有很多学习要做,能够创建这样的查询。