暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle SQL查询

askTom 2017-06-24
187

问题描述

嗨,汤姆,

我有以下要求

表:
create table  test1
(start_date date,
amount number)

insert into test1 values('18-jan-17', 27000);
insert into test1 values('19-jan-17', 27000);
insert into test1 values('20-jan-17', 30000);
insert into test1 values('21-jan-17', 30000);
insert into test1 values('22-jan-17', 30000);
insert into test1 values('23-jan-17', 29000);
insert into test1 values('24-jan-17', 29000);
insert into test1 values('25-jan-17', 30000);
insert into test1 values('26-jan-17', 30000);

commit;

START_DATE         AMOUNT
18-JAN-17 00:00:00 27000
19-JAN-17 00:00:00 27000
20-JAN-17 00:00:00 30000
21-JAN-17 00:00:00 30000
22-JAN-17 00:00:00 30000
23-JAN-17 00:00:00 29000
24-JAN-17 00:00:00 29000
25-JAN-17 00:00:00 30000
26-JAN-17 00:00:00 30000


现在期望的输出是
START_DATE   END_DATE
18-JAN-17    19-JAN-17
20-JAN-17    22-JAN-17
23-JAN-17    24-JAN-17
25-JAN-17    26-JAN-17


我尝试了下面的查询

WITH tab AS
  (SELECT rownum rn, a.* FROM test1 a ORDER BY start_date
  )

SELECT *
FROM
  (SELECT x.start_date ,
    CASE
      WHEN x.amount = y.amount
      THEN y.start_date
    END AS end_date
  FROM tab x,
    tab y
  WHERE x.rn+1 = y.rn(+)
  )
WHERE end_date IS NOT NULL.


但是我的输出看起来像
START_DATE              END_DATE
18-JAN-17 00:00:00 19-JAN-17 00:00:00
20-JAN-17 00:00:00 21-JAN-17 00:00:00 --> THIS ROW IS NOT DESIRED (instead it should be 20-jan-17    22-jan-17)
21-JAN-17 00:00:00 22-JAN-17 00:00:00
23-JAN-17 00:00:00 24-JAN-17 00:00:00
25-JAN-17 00:00:00 26-JAN-17 00:00:00



请帮我查询一下

谢谢
阿伦

专家解答

你的逻辑到底是什么?查找具有相同金额的连续天数的开始日期和结束日期?

如果是这样,Tabibitosan方法是你的朋友:

WITH tab AS
  (SELECT a.*, 
          row_number() over (order by start_date) -
          row_number() over (partition by amount order by start_date) grp
   FROM test1 a 
  )
 select min(start_date), max(start_date), amount from tab
 group  by grp, amount
 order  by 1;

MIN(START_DATE)       MAX(START_DATE)       AMOUNT  
18-JAN-0017 00:00:00  19-JAN-0017 00:00:00  27000   
20-JAN-0017 00:00:00  22-JAN-0017 00:00:00  30000   
23-JAN-0017 00:00:00  24-JAN-0017 00:00:00  29000   
25-JAN-0017 00:00:00  26-JAN-0017 00:00:00  30000 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论