最近在看关于oracle的书,遇到了一些不理解的sql查询,不理解其中的思路,烦请各位能指出其中的思想关键所在,谢谢drop table job_history; 
create table job_history(
employee_id number not null,
 start_date date,
 end_date date,
 ename varchar2(30),
 job  varchar2(30),
 job_id number
); delete from job_history; 
insert into job_history values(107,to_date('2014-07-07','yyyy-mm-dd'),to_date('2015-07-07','yyyy-mm-dd'),'polly','sales',1);
insert into job_history values(107,to_date('2015-07-07','yyyy-mm-dd'),to_date('2018-07-07','yyyy-mm-dd'),'polly','finance',2);
insert into job_history values(104,to_date('2014-06-07','yyyy-mm-dd'),to_date('2015-06-07','yyyy-mm-dd'),'hanmeimei','secrectory',3);
insert into job_history values(104,to_date('2015-06-07','yyyy-mm-dd'),to_date('2017-06-07','yyyy-mm-dd'),'hanmeimei','finance',2);
insert into job_history values(105,to_date('1985-06-07','yyyy-mm-dd'),to_date('1987-02-07','yyyy-mm-dd'),'litao','engineer',4);
insert into job_history values(105,to_date('1987-06-07','yyyy-mm-dd'),to_date('2000-02-07','yyyy-mm-dd'),'litao','operations person',5);
insert into job_history values(4,to_date('2003-06-07','yyyy-mm-dd'),to_date('2006-04-07','yyyy-mm-dd'),'lilei','manager',6);
insert into job_history values(11,to_date('2006-08-07','yyyy-mm-dd'),to_date('2009-04-07','yyyy-mm-dd'),'lilei','ceo',7);
insert into job_history values(5,to_date('1999-01-07','yyyy-mm-dd'),to_date('1999-08-07','yyyy-mm-dd'),'uncle wang','cto',8);
insert into job_history values(12,to_date('2009-05-07','yyyy-mm-dd'),to_date('2010-08-07','yyyy-mm-dd'),'uncle wang','sales',9);
insert into job_history values(6,to_date('2001-07-07','yyyy-mm-dd'),to_date('2005-06-07','yyyy-mm-dd'),'jim','police',10);
insert into job_history values(13,to_date('2005-07-07','yyyy-mm-dd'),to_date('2009-10-07','yyyy-mm-dd'),'jim','sales',1);
insert into job_history values(7,to_date('2004-09-07','yyyy-mm-dd'),to_date('2008-06-07','yyyy-mm-dd'),'green','waiter',11);
insert into job_history values(14,to_date('2008-09-07','yyyy-mm-dd'),to_date('2015-06-07','yyyy-mm-dd'),'green','waiter',11);
insert into job_history values(1, to_date('2016-02-03', 'yyyy-mm-dd'), to_date('2016-09-03', 'yyyy-mm-dd'), 'lilei','reporter',12);
insert into job_history values(105, to_date('2016-02-03', 'yyyy-mm-dd'), to_date('2016-09-03', 'yyyy-mm-dd'), 'litao',  'reporter',12);
insert into job_history values (104, to_date('2016-02-03', 'yyyy-mm-dd'), to_date('2016-09-03', 'yyyy-mm-dd'),'hanmeimei', 'reporter',12);
insert into job_history values (104, to_date('2016-11-03', 'yyyy-mm-dd'), to_date('2017-10-03', 'yyyy-mm-dd'), 'hanmeimei',  'model',13);一:
最终结果为了查询:员工在自己做过的工作岗位上年限一样的员工列表:
1.普通的表自连接查询很好理解 
2.第二种方式,最大年限等于最小年限的这种方法不理解,或者group by之后的数据结构是啥样的?
二:
1.第一种方法,还算好理解
2.第二种方式,是基于什么思路或者方向的?上述内容来自《精通oracle》第二版,第4章,有兴趣的可以看看

解决方案 »

  1.   

    你说的第二种方式是指哪个SQL语句?
      

  2.   

    说的是文中按照集合的方式给出的sql,,两个问题都是第二个比较短的sql
      

  3.   

    第二个表格, 根据第一个SQL的写法可以得出该客户的订单是连续的且单一的. 那自然是可以(最大-最小)/数量;
    但是这种表设计很不好,现实中也少见.
      

  4.   

     
    这个要看业务怎样的。一般来说:每个订单是有周期的,然后计算每个订单的平均周期;
    例如:
    订单 订单日 订单完成时间
    订单1 2017/1/1 2017/1/10
    订单2 2017/1/1 2017/1/15
    这种业务的话,是先计算出每个订单的周期,然后AVG。
    楼主的给的例子,更像是订单没有周期的概念,需求为求一段时间,平均多少天产生1个订单。