oracle 求助,检索出所有满足十分钟内三条数据的sql
------解决思路----------------------
没有 ORACLE,自己改下错。大概就是这个逻辑。
用递归的方式,用前一段的结束时间进行排除。
with t1 AS (--向后划分10分钟
SELECT id, userno, time, time+10/60/24 etime
FROM products
)
,t2 AS (--统计10分钟内的条数和结束时间
SELECT t1.id, t1.userno, t1.time, t1.etime,
COUNT(*) c, MAX(p.time) rtime
FROM t1
JOIN products p
ON p.userno = t1.userno
AND p.time >= t1.time
AND p.time < t1.etime
GROUP BY t1.id, t1.userno, t1.time, t1.etime
)
,t3 AS (--排除3条以下的
SELECT *,
ROW_NUMBER() OVER(PARTITION BY userno ORDER BY time) rn
FROM t2
WHERE c >= 3
)
SELECT id, userno, time, rtime
FROM t3
START WITH rn = 1
CONNECT BY time > PRIOR rtime
AND NOT EXISTS (SELECT *
FROM t3 t
WHERE t.time > PRIOR t3.rtime
AND t.rn < t3.rn)