我有一个名为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查询从大表中提取最长的数据集?
由于
答案 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;