Oracle - 查找列中连续出现的值最多的组

时间:2016-03-18 20:39:00

标签: sql oracle

我有一个名为test_table的表结构,如下所示:

Timestamp Value
08:45:45 C 
08:45:59 E 
08:46:52 V 
08:46:59 C 
08:47:09 C 
08:48:00 C 
08:48:30 C 
08:48:55 C 
08:49:45 E 
08:50:45 E 
08:41:45 V 

依旧......

这是一张大桌子,大约有3000行。我想找到表中的一部分(开始和结束时间戳),表示“C”值运行时间最长。例如,在上述情况下,它将是8:46:59到8:48:55。 是否有oracle查询从大表中提取最长的数据集?

由于

1 个答案:

答案 0 :(得分:3)

有一个技巧可以使用row_number()值的差异来识别序列:

select value, count(*) as sequence_length, min(timestamp), max(timestamp)
from (select t.*,
             (row_number() over (order by timestamp) -
              row_number() over (partition by value order by timestamp)
             ) as seqnum
      from t
     ) t
where value = 'C'
group by seqnum, value
order by max(timestamp) - min(timestamp) desc;

要获得一行,您可以在Oracle 12c +中使用fetch first 1 row only。在早期版本中,您可以使用:

select t.*
from (<subquery>
      order by . . .
     ) t
where rownum = 1;