如何保存sql中的最后一个检查点以用于下一行

Ama*_*anS 15 sql vertica

有什么办法可以存储最后一次迭代的行结果并将其用于下一行迭代吗?

例如,我有一个表说(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  
Run Code Online (Sandbox Code Playgroud)

现在假设我有exceptionTime90分钟不变.如果我开始检查我的Time_Table话:

  1. 对于第一行,因为在09:00:00,它之前没有行将直接将此记录放入我的目标表中.现在我的参考点是9:00:00.

  2. 对于10:00:00,最后一个参考点的第二行是09:00:00TIMESTAMPDIFF(s,09:00:00,10:00:00)60,它小于所需的90.我不将此行添加到我的目标表.

  3. 对于第三行,最后记录的异常是at,09:00:00并且TIMESTAMPDIFF(s,09:00:00,11:00:00)120是大于所需的90,因此我选择此记录并将参考点设置为11:00:00.

  4. 对于第四排TIMESTAMPDIFF(s,11:00:00,12:00:00).同样,它不会被保存.

  5. 这个又被保存了.

目标表

__   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 
Run Code Online (Sandbox Code Playgroud)

有什么办法可以解决这个问题purely in 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 
)
Run Code Online (Sandbox Code Playgroud)

但这实际上并不起作用.

Ani*_*lof 2

在 Vertica 中仅使用纯 SQL 是不可能实现这一点的。要在纯 SQL 中执行此操作,您需要能够执行 Vertica 产品不支持的递归查询。在其他数据库产品中,您可以使用WITH 子句来执行此操作。对于 Vertica,您必须在应用程序逻辑中执行此操作。这是基于语句“查询块中的每个WITH子句必须具有唯一的名称。尝试对同一查询块中的WITH子句查询名称使用同名别名会导致错误。WITH子句不支持INSERT、DELETE、和 UPDATE 语句,并且您不能递归地使用它们”来自Vertica 7.1.x 文档