有没有办法存储最后迭代的行结果,并将其用于下一行迭代?
例如,我有一个表,名为 (Time_Table
)。
__ Key type timeStamp
1 ) 1 B 2015-06-28 09:00:00
2 ) 1 B 2015-06-28 10:00:00
3 ) 1 C 2015-06-28 11:00:00
4 ) 1 A 2015-06-28 12:00:00
5 ) 1 B 2015-06-28 13:00:00
假设我有一个常量为90分钟的exceptionTime
。
如果我开始检查我的Time_Table
,则:
对于第一行,在
09:00:00
之前没有行,它将直接将此记录放入目标表中。现在我的参考点是9:00:00。对于第二行,在
10:00:00
,最后的参考点是09:00:00
,而TIMESTAMPDIFF(s,09:00:00,10:00:00)
为60,小于所需的90。我不会将此行添加到目标表中。对于第三行,上一个异常记录是在
09:00:00
记录的,而TIMESTAMPDIFF(s,09:00:00,11:00:00)
为120,大于所需的90,因此我选择此记录并将参考点设置为11:00:00
。对于第四行,
TIMESTAMPDIFF(s,11:00:00,12:00:00)
也不会被保存。这一行再次被保存。
目标表
__ Key type timeStamp
1 ) 1 B 2015-06-28 09:00:00
2 ) 1 C 2015-06-28 11:00:00
3 ) 1 B 2015-06-28 13:00:00
有没有什么方法可以仅用SQL解决这个问题?
我的方法:
SELECT * FROM Time_Table A WHERE NOT EXISTS(
SELECT 1 FROM Time_Table B
WHERE A.timeStamp > B.timeStamp
AND abs(TIMESTAMPDIFF(s,B.timeStamp,A.timeStamp)) > 90
)
但这实际上并不会起作用。
Vertica
是否支持递归CTE?如果是的话,类似于**demo**这样的东西应该可以工作。 - Lukasz SzozdaTime_Table
中不会有多个具有完全相同“时间戳”的记录吗? - quest4truth