问题描述
嗨,汤姆,
我总是从您的文章和 @ asktom.oracle.com中学习新技巧,我的表格中有如下所示的数据。
您能帮我为上述结果形成一个SQL查询吗?
谢谢你的帮助,
女孩
我总是从您的文章和 @ asktom.oracle.com中学习新技巧,我的表格中有如下所示的数据。
create table tab1(dat date, price number) / insert into tab1 values (to_date('01-01-2020','MM-DD-YYYY'),1000) / insert into tab1 values (to_date('01-02-2020','MM-DD-YYYY'),1000) / insert into tab1 values (to_date('01-03-2020','MM-DD-YYYY'),2000) / insert into tab1 values (to_date('01-04-2020','MM-DD-YYYY'),2000) / insert into tab1 values (to_date('01-05-2020','MM-DD-YYYY'),3000) / insert into tab1 values (to_date('01-06-2020','MM-DD-YYYY'),2000) / I want to see result like below Mindate maxdate Price 01/01/2020 01/02/2020 1000 01/03/2020 01/04/2020 2000 01/05/2020 01/05/2020 3000 01/06/2020 01/06/2020 2000复制
您能帮我为上述结果形成一个SQL查询吗?
谢谢你的帮助,
女孩
专家解答
你可以看到我是如何一点一点地建立起来的
SQL> SQL> create table tab1(dat date, price number) 2 / Table created. SQL> SQL> insert into tab1 values (to_date('01-01-2020','MM-DD-YYYY'),1000) 2 / 1 row created. SQL> insert into tab1 values (to_date('01-02-2020','MM-DD-YYYY'),1000) 2 / 1 row created. SQL> insert into tab1 values (to_date('01-03-2020','MM-DD-YYYY'),2000) 2 / 1 row created. SQL> insert into tab1 values (to_date('01-04-2020','MM-DD-YYYY'),2000) 2 / 1 row created. SQL> insert into tab1 values (to_date('01-05-2020','MM-DD-YYYY'),3000) 2 / 1 row created. SQL> insert into tab1 values (to_date('01-06-2020','MM-DD-YYYY'),2000) 2 / 1 row created. SQL> SQL> select 2 tab1.*, 3 case when nvl(lag(price) over ( order by dat),-1) != price then 4 row_number() over ( order by dat ) 5 end tag 6 from tab1 7 / DAT PRICE TAG --------- ---------- ---------- 01-JAN-20 1000 1 02-JAN-20 1000 03-JAN-20 2000 3 04-JAN-20 2000 05-JAN-20 3000 5 06-JAN-20 2000 6 6 rows selected. SQL> select 2 dat, price, max(tag) over ( order by dat ) as tag2 3 from 4 ( 5 select 6 tab1.*, 7 case when nvl(lag(price) over ( order by dat),-1) != price then 8 row_number() over ( order by dat ) 9 end tag 10 from tab1 11 ) 12 / DAT PRICE TAG2 --------- ---------- ---------- 01-JAN-20 1000 1 02-JAN-20 1000 1 03-JAN-20 2000 3 04-JAN-20 2000 3 05-JAN-20 3000 5 06-JAN-20 2000 6 6 rows selected. SQL> select tag2, min(dat), max(dat) 2 from ( 3 select 4 dat, price, max(tag) over ( order by dat ) as tag2 5 from 6 ( 7 select 8 tab1.*, 9 case when nvl(lag(price) over ( order by dat),-1) != price then 10 row_number() over ( order by dat ) 11 end tag 12 from tab1 13 ) 14 ) 15 group by tag2 16 order by 1; TAG2 MIN(DAT) MAX(DAT) ---------- --------- --------- 1 01-JAN-20 02-JAN-20 3 03-JAN-20 04-JAN-20 5 05-JAN-20 05-JAN-20 6 06-JAN-20 06-JAN-20 SQL> SQL>复制
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
792次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
665次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
595次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
550次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
535次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
510次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
500次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
472次阅读
2025-04-17 09:30:30
OR+DBLINK的关联SQL优化思路
布衣
383次阅读
2025-05-05 19:28:36
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
383次阅读
2025-04-15 14:48:05