DB2 SQL查找与其他行间隔为1分钟的行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DB2 SQL查找与其他行间隔为1分钟的行相关的知识,希望对你有一定的参考价值。

Linux上的DB2 v10.5.0.5

我有一张类似的表:

LOG_IN              | LOG_OFF
-----------------------------------------
2017-01-22 08:00:00 | 2017-01-22 09:00:00
2017-01-22 09:01:00 | 2017-01-22 10:00:00
2017-01-22 10:00:00 | 2017-01-22 10:15:00
2017-01-22 10:15:00 | 2017-01-22 10:45:00
2017-01-22 11:00:00 | 2017-01-22 11:29:00
2017-01-22 11:30:00 | 2017-01-22 12:00:00

我想选择与其他行间隔1分钟的行。

期望的结果:

LOG_IN              | LOG_OFF
-----------------------------------------
2017-01-22 08:00:00 | 2017-01-22 09:00:00
2017-01-22 09:01:00 | 2017-01-22 10:00:00
2017-01-22 11:00:00 | 2017-01-22 11:29:00
2017-01-22 11:30:00 | 2017-01-22 12:00:00
答案

在Db2中你可以使用date / time arithmetics来做到这一点。没有测试,这样的东西应该工作:

select log_in, log_off
from accountlogs
where log_off - log_in = 1 minute

而不是1 minute你也可以使用其他值或<而不是=

如果要查找与其他行的间隙,则需要自行加入:

select al1.log_in, al1.log_off, al2.log_in, al2.log_off
from accountlogs al1, accountlogs al2
where al1.log_off - al2.log_in < 1 minute

以上内容适合您所需的结果,并返回匹配的其他行的数据。

另一答案

鉴于您的LUW版本,LAG函数也应该可用:

SELECT log_in, log_off
FROM (SELECT log_in, log_off, (LAG(log_off) OVER (ORDER BY log_in)) - 1 MINUTE AS previous
      FROM Data) d
WHERE log_in = previous

Fiddle Example (SQL Server)

这可能比自联接更快(您需要检查):日期数学将导致优化器忽略任何索引,这可能会对大型表造成严重的性能损失。但是,请注意,这会将您限制在前一行,这可能不是您想要的(这需要自联接才能找到所有匹配的行)。

以上是关于DB2 SQL查找与其他行间隔为1分钟的行的主要内容,如果未能解决你的问题,请参考以下文章

SQL:仅选择以给定间隔与其他结果分隔的值的行

SQL Server 查找接近服务日期和月份的行

在 db2 中查找不具有连续日期范围的行

Db2 SQL 根据大量数据选择排除行的行

如何在午夜 12:01 使用 Spring Boot 将间隔后的行添加到数据库 SQL 中

在 numpy 数组中查找与所有其他行相比具有最小值的行