我有下表 -
UserId Some_Value1 Datetime
1 0 24-11-2016 13:00
1 0 24-11-2016 13:45
1 1 24-11-2016 15:00
1 1 24-11-2016 17:15
2 0 25-11-2016 11:23
2 1 25-11-2016 13:22
2 0 25-11-2016 14:01
2 1 25-11-2016 18:00
如您所见 - 当上一行的日期时间值大于 1 小时
时,Some_Value1
中的值为 1
相同的 userId
当 datetime
字段大于 1 小时时,我试图获取序列号而不是
。1
和 0
类似于下面的结果 -
UserId Some_Value1 Datetime Some_Value2
1 0 24-11-2016 13:00 1
1 0 24-11-2016 13:45 1
1 1 24-11-2016 15:00 2
1 1 24-11-2016 17:15 3
2 0 25-11-2016 11:23 1
2 1 25-11-2016 13:22 2
2 0 25-11-2016 14:01 2
2 1 25-11-2016 18:00 3
我正在尝试使用 postgres
或 Redshift
来实现这一点。标记 Oracle
和 Mysql
以覆盖更多受众并获取伪代码作为 SQL
查询对于所有数据库来说都是相同的,除了内置函数.
以上所有数据仅供引用。这只是样本数据,真实场景会有更多随机数据。因此,代码需要是动态的,而不是硬编码的。
最佳答案
sum (Some_Value1) over
(
partition by UserId
order by Datetime
rows unbounded preceding
) + 1 as Some_Value2
关于sql - 获取聚合值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40712293/