17,377
社区成员
发帖
与我相关
我的任务
分享
row_number() over(order by dateD) --按照时间排序
regexp_substr(id, '\d+') --截取 步骤1 步骤2 步骤3 后面的 1,2,3 这三个数字
--两者相减,得到的结果 既可以达到你想要的分组目的
--仔细研究一下,本来想给你写一个,定睛一瞧,3楼已经给出了答案,呵呵。
另外,看明白之后记得这里也要给分哦。
with test as
(SELECT 'bz3' as id, '11/17 00:00' AS dateD
from dual
union all
SELECT 'bz1' as id, '11/17 01:00' AS dateD
from dual
union all
SELECT 'bz2' as id, '11/17 02:00' AS dateD
from dual
union all
SELECT 'bz3' as id, '11/17 03:00' AS dateD
from dual
union all
SELECT 'bz1' as id, '11/17 04:00' AS dateD
from dual
union all
SELECT 'bz2' as id, '11/17 05:00' AS dateD
from dual
union all
SELECT 'bz3' as id, '11/17 06:00' AS dateD
from dual
union all
SELECT 'bz1' as id, '11/17 07:00' AS dateD from dual)
select rk,
max(decode(ID, 'bz1', dateD, '')) as str1,
max(decode(ID, 'bz2', dateD, '')) as str2,
max(decode(ID, 'bz3', dateD, '')) as str3
from (select id,
dateD,
row_number() over(partition by id order by dateD asc) rk
from test)
group by rk;