2009-08-27 14 views
0

我有一個維護腳本,它將一堆數據從一個數據庫轉儲到另一個數據庫。在IFNULL中取得最接近的結果

我試圖讓數據

SELECT id, IFNULL(rank1,(SELECT rank2 
    FROM table 
    WHERE rank1 IS NOT NULL and 
     rank2<rank2 of current row 
    ORDER BY rank2 LIMIT 1)) FROM table 

我正在試圖獲得與當前行的秩2,就是等級-1不爲空最近的秩2。我假設rank1是rank2的有效替代品

所以,我相信我有兩個問題。

  1. 我不認爲我有秩2的嵌套查詢語句
  2. 使用,我不知道怎麼說「讓最接近rank2<rank2電流。

我從0-20,000秩1範圍內的值,並且從秩2的範圍0-150,000(不知道爲什麼會問題)。行列之間沒有有效的相關性。

Rank1總是一個更可靠的數字,但通常是空的,所以我試圖用這種替代品來欺騙我的訂單。

這裏有點樣本數據來作爲例子

 
id   rank1   rank2 
1    120,000   14,000 
2    120,000   18,420 
3    126,000   15,500 
4    85,000   NULL 
5    75,000   16,000 
6    70,000   15,700 
7    68,000   NULL 
8    42,000   NULL 
9    26,000   NULL 
10   21,500   8,000 

我希望找回的2,5,4,6,7,3,1,8,9,10順序使用。或者接近於此的東西。基本上,當我的rank2爲空時,獲得最接近的rank1的最接近的rank2。

我不認爲這是'完美',但比排序rank1更好。

回答

0

我不是100%確定你在問什麼。 COALESCE(rank1,rank2,rankX)會在哪裏返回第一個非空值爲你工作?

+0

我不這麼認爲,我試圖得到所有的行,並且從我的理解中,COALESCE只會給我第一個非空值。我試圖得到最接近的非空值。我正在用示例數據編輯問題。 – pedalpete