我需要选择相同的名称,但不同的姓氏和登录时间戳不到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
答案 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