【问题标题】:SQL Timestamp query: Check if one timestamp is earlier than anotherSQL 时间戳查询:检查一个时间戳是否早于另一个
【发布时间】:2019-12-10 16:42:47
【问题描述】:

对于 CallLogTable....我需要编写一个查询来查找其中一行的 created_ts 时间戳比该行的 updated_ts 时间戳更早的时间戳立即之前。第 1 行和第 2 行是一个示例(第 2 行的 created_ts 早于第 1 行的 updated_ts)。我见过 Rownums 的使用,但不知道如何在这里应用它。非常感谢您的帮助!

【问题讨论】:

    标签: sql oracle date timestamp window-functions


    【解决方案1】:

    您可以使用窗口函数。 lag() 允许您访问上一行,然后您可以比较相关列:

    select *
    from (
        select  
            t.*,
            lag(updated_ts) over(order by id) lag_updated_ts
        from mytable t
    ) t
    where created_ts < lag_updated_ts
    

    这假定列id 可用于对记录进行排序。如果您想要不同的列进行排序,则可以更改窗口函数的order by 子句。

    【讨论】:

    • 有没有办法(在 SQL Server 中)可以忽略毫秒差异?即仅返回存在秒数差异的场景
    • 有没有办法可以排除这个查询中的毫秒数?非常感谢。 (或者更理想地说是 5 秒的时间差)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 2015-12-09
    相关资源
    最近更新 更多