当前位置: 代码迷 >> Oracle面试 >> oracle ,检索出所有满足十分钟内三条数据的sql
  详细解决方案

oracle ,检索出所有满足十分钟内三条数据的sql

热度:358   发布时间:2016-04-24 03:21:18.0
oracle 求助,检索出所有满足十分钟内三条数据的sql
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)
  相关解决方案