我有一个表items
它代表移动的项目。其中,该表中有PK name
,其中包含了创建条目和字符串type
的时间,这可以是start
,move
或end
与move
条目来插图中start
和end
时间戳creation_time
。通过额外的约束获得连续时间戳中最大的区别?
表的一部分可能看起来像这样:
name creation_time type
_________________________________
i1 2017-03-01 10:00:01 start
i1 2017-03-01 10:00:02 move
i1 2017-03-01 10:00:08 move
i1 2017-03-01 10:00:10 end
i1 2017-03-01 10:00:31 start
i1 2017-03-01 10:00:33 move
i1 2017-03-01 10:00:37 end
我想要得到的是连续的时间戳的最大区别(S),其中第二时间戳的类型不是start
(我不照顾end
和start
之间的时间)。
基于this SO question我来用下面的查询这还没有考虑到的条目类型:
select name, creation, next_creation, (next_creation-creation) difference from (
select name, creation, (
select min(creation) from items i2
where i2.name=i.name
and i2.creation > i.creation
) as next_creation
from items i
)
where (next_creation-creation) is not null
order by difference desc
我的问题是,我不知道如何正确地过滤了现在键入。据我的理解,我必须从最内层的查询中获取类型,因为我关心第二项的类型,然后将and type<>'start'
添加到最外层查询的where子句中 - 但我无法从中获取两个值子查询,对吗?
编辑:我希望是这样的结果:
name creation next_creation difference action
i1 2017-03-01 10:00:02 2017-03-01 10:00:08 6s move
i1 2017-03-01 10:00:33 2017-03-01 10:00:37 4s end
[...]
正如你看到的,对于第一end
和第二start
之间的时间没有进入,这就是要通过过滤来实现方式。
例如,在第一次和最后一次输入之间的时间也没有输入,因为我想要连续输入之间的差异。
请告诉我们查询的最终结果应该是什么样子等。 –
您需要每个名称值的最大差异? – Mikhail