亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Oracle SQL 如何實現流水數據轉換為時間區間數據?

Oracle SQL 如何實現流水數據轉換為時間區間數據?

慕慕森 2018-08-16 18:33:55
有采購流水數據:PUR_ODRER(WH,ITEM,PRICE,IN_DATE)對應倉庫,商品,價格,日期?,F在想將商品的價格波動存成時間區間數據:PUR_PRC_HIST(WH,ITEM,PRICE,START_DATE,END_DATE)對于倉庫,商品,價格,開始日期,結束日期。如何用SQL獲得新的結果集?
查看完整描述

2 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

Oracle 思路:

1、使用lag()進行行間比較,使用flag標識,相同置零,不同置1
2、使用sum(flag),標識區間
3、使用max(date),獲取時間區間

注:先理解窗口函數
參考SQL Cookbook 章節:10.3


查看完整回答
反對 回復 2018-08-26
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

給你個思路:

1、按照品類,日期排序,2、對排完序的數據進行標號處理,當品類或者價格發生變動時,標號+1,3、然后按照品類,價格和標號進行分組,獲取最小日期和最大日期就是你的價格波動區間

思路就是這樣,這里有個mysql版本的sql,你自己改成Oracle版本即可,或者Oracle可能有更高級的現成的功能可以用,我就不清楚了:

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;


查看完整回答
反對 回復 2018-08-26
  • 2 回答
  • 0 關注
  • 965 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號