2 回答

TA貢獻1921條經(jīng)驗 獲得超9個贊
Oracle 思路:
1、使用lag()進行行間比較,使用flag標(biāo)識,相同置零,不同置1
2、使用sum(flag),標(biāo)識區(qū)間
3、使用max(date),獲取時間區(qū)間
注:先理解窗口函數(shù)
參考SQL Cookbook 章節(jié):10.3

TA貢獻1911條經(jīng)驗 獲得超7個贊
給你個思路:
1、按照品類,日期排序,2、對排完序的數(shù)據(jù)進行標(biāo)號處理,當(dāng)品類或者價格發(fā)生變動時,標(biāo)號+1,3、然后按照品類,價格和標(biāo)號進行分組,獲取最小日期和最大日期就是你的價格波動區(qū)間
思路就是這樣,這里有個mysql版本的sql,你自己改成Oracle版本即可,或者Oracle可能有更高級的現(xiàn)成的功能可以用,我就不清楚了:
select ITEM, PRICE,min(IN_DATE) start_date,max(IN_DATE) end_date
from (
select
@gn:=case when @ITEM<>ITEM or @PRICE<>PRICE then @gn+1 else @gn end gn,
@ITEM:=ITEM ITEM,
@PRICE:=PRICE PRICE,
IN_DATE
from
(select ITEM,PRICE,IN_DATE
from PUR_ODRER
order by ITEM, IN_DATE) a,
(select @gn:=0) b
) aa
group by ITEM, PRICE,gn
order by gn;
- 2 回答
- 0 關(guān)注
- 974 瀏覽
添加回答
舉報