Oracle Query时间差异

时间:2013-12-30 14:13:18

标签: sql oracle

我需要选择相同的名称,但不同的姓氏和登录时间戳不到3分钟。

例如我的表就是这样:

Name    Surname      LoginTimeStamp
-----   --------    ----------------
jane    smith         30.12.2013 10:48:50
bill    green         30.12.2013 10:49:56
jane    red           30.12.2013 10:49:00

结果应该是:

Name    Surname      LoginTimeStamp
-----   --------    ----------------
jane    smith         30.12.2013 10:48:50
jane    red           30.12.2013 10:49:00

1 个答案:

答案 0 :(得分:5)

此查询将返回Name在任意三分钟间隔内具有LoginTimeStamp的多行的所有行。它看起来像前三分钟和三分钟后。

如果我没有正确理解时间窗口,您可以调整INTERVAL部分。 INTERVAL值只喜欢整数,因此如果您需要在使用前1 1/2分钟INTERVAL '90' SECOND - Oracle将不允许INTERVAL '1.5' MINUTE

SELECT Name, Surname, LoginTimeStamp
FROM (
  SELECT
    Name,
    Surname,
    LoginTimeStamp,
    COUNT(*) OVER (
        PARTITION BY Name
        ORDER BY LoginTimeStamp
        RANGE BETWEEN
          INTERVAL '3' MINUTE PRECEDING AND
          INTERVAL '3' MINUTE FOLLOWING
      ) AS ThreeMinCount
  FROM myTable
)
WHERE ThreeMinCount > 1