選擇行我與SQL非常強大,但我想不出很好的解決這個「相似」的數據分析問題:與最小差
給定一個表是一個整數集,我需要將每個整數與第二個表中最相似(最小絕對差)的整數進行匹配。通常我會做一個笛卡爾連接,並按照數字的不同進行排序,但是我只需要從每個表中獲得每行的一個配對,所以兩個表中的任何值都不能使用兩次。
任何想法如何做到這一點?
編輯:實施例:
TABLE_A
34
57
108
219
380
5000
表-B
4000
200
400
99
40
33
34
4600
配對將是從表-A一個行並從表-B最近的行:
RESULT
34,34
57,40
108,99
219,200
380,400
5000,4600
因此,任何一個表的行都不會出現兩次。
編輯:更多解釋:我試圖解決這個問題,從table_a給出1行,我們發現table_b中最接近的1行。這成爲一對,並被刪除。然後從table_a中取下一行並重復。所以我們試圖爲每一行找到最佳匹配並優化配對,而不是試圖優化總體差異。
「...每個表格的每行有一個分區...」令人困惑。它是「在第一個表格中獲取每個值並在第二個表格中找到最接近的值」?還是有一些要求,第二個表中的每個值都必須出現在列表中,否則必須出現在最終集合中?也許一個小例子會有所幫助 – 2011-05-19 18:37:43
您可以添加示例數據來幫助我們可視化輸入和輸出嗎?我們可以假設整數在每個表中都是唯一的嗎?一張桌子上有5張和7張,另一張是6張? 6應該出現兩次,因爲它接近於5和7 – gbn 2011-05-19 18:38:20
如果您正在尋找組合之間總差異最小的解決方案,那麼如果您在一個表中有5個和8個,第二個表中有7個和15個,那麼(5,7),(8,15)。 ((7-5)+(15-8))== 9,但((8-7)+(15-5)== 11,所以即使最小的差異在7和8之間也是如此。我們確實需要知道如何優先考慮解決方案並解決衝突/重複問題,正如gbn所提到的那樣。 – 2011-05-19 18:50:02