我有一个名为Movement_history的表(代表汽车的动向(登记,出售,吊销,修理,毁坏))。我想获得一家公司的信息 已经卖出了每辆车,卖给了谁。
这是我的桌子(选择*)
code_car date_movement type_movement current_company_code
6000 01/01/2010 NEW 5
6000 01/01/2012 REPARATION 5
6000 01/11/2015 SOLD 8
6000 01/01/2017 DESTROYED 8
4444 01/05/2000 NEW 10
4444 01/05/2000 SUSPENDED 10
4444 01/05/2015 SOLD 5
4444 01/07/2015 RENOVATION 5
4444 09/12/2015 SOLD 18
.... ... ... ...
因此,如果我希望在确定的时间(2015年1月1日至2015年2月31日)中出售公司5的所有汽车,则结果如下:
code_car date_movement type_movement current_company_code
6000 01/11/2015 SOLD 8
4444 09/12/2015 SOLD 18
这是我的查询。首先,我有一天从公司5获得了所有汽车。然后,我获得了所有“卖出”的动向,如果某天成为公司5的一部分,我想获得每辆售出的汽车。
select
code_car,date_movement,type_movement,current_company_code
from
movement_history where code_car in (
(select code_car from movement_history where current_company_code = 5)) and
code_car IN
(select code_car from movement_history where type_movement =
'SOLD' and code_car <> 5 and date_movement > to_Date('01-01-2015','dd/mm/yyyy') and date_movement < to_Date('31-12-2015','dd/mm/yyyy'));
如果某天售出的每辆汽车至少有5次成为公司的一部分,我想这是很难做的。
有什么建议吗?非常感谢。
答案 0 :(得分:1)
我明白了。 current_company_code
是弄汽车的公司。因此,您想使用LAG()
:
select mh.*
from (select mh.*,
lag(mh.current_company_code) over (partition by mh.code_car order by date_movement) as prev_ccc
from movement_history mh
) mh
where mh.type_movement = 'SOLD' and
mh.date_movement >= date '2015-01-01' and
mh.date_movement < date '2016-01-01' and
mh.prev_ccc = 5;