台灣最大程式設計社群網站
線上人數
1040
 
會員總數:245903
討論主題:189495
歡迎您免費加入會員
討論區列表 >> Oracle >> 最大關聯性
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
最大關聯性
價值 : 400 QP  點閱數:1550 回應數:5
樓主

pefo
門外漢
0 1
689 2
發送站內信

Group Value
----- -----
AAAA 1
AAAA 2
BBBB 2
BBBB 3
CCCC 4
CCCC 5
DDDD 6
DDDD 5
EEEE 4
EEEE 8

可以變成
Group Value
----- -----
AAAA 1
AAAA 2
AAAA 2
AAAA 3
CCCC 4
CCCC 5
CCCC 6
CCCC 5
AAAA 4
AAAA 8

請問大大有人可以解此問題嗎?不要用遞迴~麻煩大家了

本篇文章發表於2013-10-19 18:20
1樓
回應

Hsu, Harry
檢舉此回應
題意不清,看不出規則性。
本篇文章回覆於2013-10-19 20:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

pefo
檢舉此回應
更正:
Group Value
----- -----
AAAA 1
AAAA 2
BBBB 2
BBBB 3
CCCC 4
CCCC 5
DDDD 6
DDDD 5
EEEE 6
EEEE 8

可以變成
Group Value
----- -----
AAAA 1
AAAA 2
AAAA 2
AAAA 3
CCCC 4
CCCC 5
CCCC 6
CCCC 5
CCCC 6
CCCC 8

Sorry, 我解釋一下, Group底下會有多的Value, Value會在別的Group內出現代表有關連, 例如:Group:CCCC有5, Group:DDDD也有5, 那麼DDDD要Update成CCCC, 再Update前因為Group:DDDD有6, 所以Group:EEEE也要被歸納在Group:CCCC內, 以上
本篇文章回覆於2013-10-19 21:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

Hsu, Harry
檢舉此回應
不用遞迴應無法達成,主要是因為相關不只一層,以BBBB--> AAAA為例此為1層加關性,是可以用Self Join方式, 但EEEE-->DDDD-->CCCC是2層相關雖然也可以用2組的Self Join,但若相關層數不定(深度)則根本無法撰寫出來,是可以使用CONNECT BY指令一組SQL就可以完成,不過這也是利用遞迴概念,如可使用CONNECT BY則可參考『CONNECT BY應用-群組合併』。
本篇文章回覆於2013-10-20 07:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

Hsu, Harry
檢舉此回應
不用Recursive,還可以用10g版本起所提供的MODEL
-------(參考OracleR Database Data Warehousing Guide------(類似EXCEL功能)
The MODEL clause brings a new level of power and flexibility to SQL calculations. With the MODEL clause, you can create a multidimensional array from query results and then apply formulas (called rules) to this array to calculate new values. The rules can range from basic arithmetic to simultaneous equations using recursion. For some applications, the MODEL clause can replace PC-based spreadsheets. Models in SQL leverage Oracle Database's strengths in scalability, manageability, collaboration, and security.
本篇文章回覆於2013-10-22 14:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
最有價值解答

Hsu, Harry
檢舉此回應
以下提供為WITH、MODEL及CONNECT BY等三種方法
方法1: WITH (Recursive)
請參考群組合併 - With指令應用, 利用2層WITH進行處理, 第1層為構建序號,第2層則是用Recursive達成逐筆遞推。建議採用此方法。
方法2: MODEL (Non-Recursive)
請參考[ORACLE] 群組合併-MODEL指令之應用, 利用ORACLE 10g所提供之MODEL,概念類似EXCEL功能,但此函數鮮少使用,後續維護上有難度。
方法3: CONNECT BY (Recursive)
請參考先前文章[ORACLE] 群組合併 - CONNECT BY應用, 利用CONNECT BY指令。

順序為建議用順序,如下:
方法1, 雖採用Recursive, 其本質是用逐筆遞推, 執行成本並不會太高, 與MSSQL語法完全相同, 維護成本最低,建議用採行。
方法2, 執行成本最低, 但維護成本最高, 此方法除非公司對此函數有一定了解程度, 否則完全不建議使用, 我常處理特殊需求也才使用過3次而已。
方法3, 此為3種方法中,成本最高之作法,但由於板主並未說明,每群的最小值是否會大於前一群最大值(Overlap), 若會Overlap則此方法為最佳方法,另外2種均假設每群的最小值需大於或等於前一群資料值。
本篇文章回覆於2013-10-24 11:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.