gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:57:50 25 4
gpt4 key购买 nike

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

例如,我有一个表 say( 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

现在假设我有一个 exceptionTime 90 分钟,这是常数。
如果我开始检查我的 Time_Table然后:
  • 对于第一行,因为在 09:00:00, 之前没有行它会直接将此记录放入我的目标表中。现在我的引用点是 9:00:00。
  • 对于第二行 10:00:00,最后一个引用点是 09:00:00TIMESTAMPDIFF(s,09:00:00,10:00:00)是 60,它小于所需的 90。我没有将此行添加到我的目标表中。
  • 对于第三行,最后记录的异常是在 09:00:00TIMESTAMPDIFF(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

    有什么办法可以解决这个问题 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
    )

    但这实际上不起作用。

    最佳答案

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

    关于sql - 如何保存sql中的最后一个检查点以用于下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37020449/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com