在Oracle SQL中对数据集进行分组

在Oracle SQL中对数据集进行分组,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我一直在尝试将存储在oracle数据库中的数据分组,以便进行更准确的分析 Current Output Time Location 10:00 A111 11:00 A112 12:00 S111 13:00 S234 17:00 A234 18:00 S747 19:00 A878 Desired Output Time Location Group Number 10:00 A111 1 11:00 A112 1 12:00 S111

我一直在尝试将存储在oracle数据库中的数据分组,以便进行更准确的分析

Current Output
Time   Location
10:00  A111
11:00  A112
12:00  S111
13:00  S234
17:00  A234
18:00  S747
19:00  A878

Desired Output
Time   Location  Group Number
10:00  A111      1
11:00  A112      1
12:00  S111      1
13:00  S234      1
17:00  A234      2
18:00  S747      2
19:00  A878      3
我一直在尝试使用over和partition by来分配值,但是我只能一直使用increment,而不仅仅是在更改时。我也尝试过使用滞后,但我很难利用它

我只需要第二列中的值从1开始,并在字段1的第一个字母更改时递增(使用substr)

这是我尝试使用的行数,但我想我离这很远。输出中也会有一个时间列,上面没有显示

select event_time, st_location, Row_Number() over(partition by 
SUBSTR(location,1,1) order 
by event_time) 
as groupnumber from pic
任何帮助都将不胜感激

编辑:

演示


这是一个缺口和孤岛问题。使用以下代码:

select location, 
       dense_rank() over (partition by SUBSTR(location,1,1) order by grp)
from
(
    select (row_number() over (order by time)) - 
           (row_number() over (partition by SUBSTR(location,1,1) order by time)) grp,
           location, 
           time
    from data
) t
order by time


其主要思想是在子查询中隔离连续的项目序列(计算
grp
列)。有了
grp
列后,剩下的就很简单了。

如何指定这些行的顺序?订单上还有其他栏目吗?请将其添加到您的示例中。最初有两列,分别是事件时间和地点,我想添加第三列。编辑原始帖子。将样本数据与其他列一起添加到
事件时间、st\u位置
我想我现在已经这样做了?这对第一个表非常有效。我刚刚做了一个编辑,在那里我给出了第二种类型的位置,我也需要这样做。为什么在两个位置之间存在冲突时它不起作用?还是因为变化值(A&S)的大小不再一致?@JamesPavett该解决方案不正确,因为它没有隔离连续序列…只是想弄清楚它是如何工作的,因为它与另一个答案类似,但我似乎无法根据位置的情况对其进行修改。只是现在尝试一下,但我相信不管怎样,这实际上都是可行的。@JamesPavett正如我所说,问题的核心是一个经典的缺口和岛屿问题(它甚至在SO中有一个标签)。尝试使用此标签搜索其他问题,它可能会帮助您理解我的解决方案。
select DENSE_RANK() over(partition by SUBSTR("location",1,1) ORDER BY SUBSTR("location",1,2)) 
as Rownumber, 
"location" from Table1;
select location, 
       dense_rank() over (partition by SUBSTR(location,1,1) order by grp)
from
(
    select (row_number() over (order by time)) - 
           (row_number() over (partition by SUBSTR(location,1,1) order by time)) grp,
           location, 
           time
    from data
) t
order by time