我在下表中有以下数据,我正在寻找一种方法来对每个 id 返回的连续时间间隔进行分组:
CREATE TABLE DUMMY
(
ID VARCHAR2(10 BYTE),
TIME_STAMP VARCHAR2(8 BYTE),
NAME VARCHAR2(255 BYTE)
);
SELECT ID, min(TIME_STAMP) "startDate", max(TIME_STAMP) "endDate", NAME
GROUP BY ID , NAME
就像是
100 20011128 20011203 David
100 20011204 20011207 Unknown
100 20011208 20011215 David
100 20011216 20011220 Sara
等等 ...
附言。我有一个示例脚本,但我不知道如何附加我的文件。
大家好,这里有更多的输入:
- 对于特定 ID,只有一条带有 time_stamp 的记录。
- 用户可以不同,例如第 1 天 David、第 2 天未知、第 3 天 David 等等。
因此,每个 ID 一年中的每一天都有一行,但用户不同。现在,我想查看断点,基于从第一天到最后一天的 time_stamp 间隔的差异,以从开始日到最后一天的日期顺序中的特定 ID。
查询结果应该是:
ID NAME MIN_DATE MAX_DATE
100 David 20011128 20050407
100 Sara 20050408 20050417
100 David 20050418 20080416
100 Unknown 20080417 20080507
100 David 20080508 20080508
100 Unknown 20080509 20080607
100 David 20080608 20080608
100 Unknown 20080609 20080921
100 David 20080922 20080922
100 Unknown 20080923 20081231
100 David 20090101 20090405
谢谢
再次嗨,非常感谢大家,我已经解决了这个问题,这里是解决方案:
select id, min(time_stamp), max(time_stamp), name
from ( select id, time_stamp, name,
max(rn) over (order by time_stamp) grp
from ( select id, time_stamp, name,
case
when lag(name) over (order by time_stamp) <> name or
row_number() over (order by time_stamp) = 1
then row_number() over (order by time_stamp)
end rn
from dummy
)
)
group by id, grp, name
order by 1