0

我在下表中有以下数据,我正在寻找一种方法来对每个 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

等等 ...

附言。我有一个示例脚本,但我不知道如何附加我的文件。

大家好,这里有更多的输入:

  1. 对于特定 ID,只有一条带有 time_stamp 的记录。
  2. 用户可以不同,例如第 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
4

1 回答 1

0
Select
   ID,
   Name,
   min(time_stamp) min_date,
   max(time_stamp) max_date
from
   Dummy
group by
   Id,
   Name

那应该行得通。

如果您想要每个 ID 的日期范围,但您可以执行所有名称:

Select
   d.Id,
   d.Name,
   dr.min_date,
   dr.max_date
from
   Dummy d

   JOIN 
      (Select
         Id,
         min(time_stamp) min_date,
         max(time_stamp) max_date
      from
         Dummy
      group by
         Id 
      ) dr
      on ( dr.Id = d.Id)
于 2009-05-20T20:12:51.807 回答