2009-08-27 5 views
0

私は、あるデータベースから別のデータベースにデータの束をダンプする保守スクリプトを持っています。IFNULLの中で最も近い結果を得る

私は現在の行のランク2を取得しようとしてる何

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 

としてデータを取得しようとしているが、ランク-1がnullではありません最寄りのランク2です。私はrank1がrank2の効果的な置き換えであると仮定しています。

私は2つの問題があると考えています。

  1. 私はネストされたselect文
  2. で使用されるランク2持っていないと思う私は、現在に最も近いrank2<rank2を得る」と言うのか分かりません。

0〜20,000からランク-1の範囲のために、私が持っている値、およびランク2の範囲0-150,000から(それは問題ではなぜわかりません)。ランク間には有効な相関はありません。

ランク1は常に信頼性の高い数字ですが、多くの場合nullですので、私はこのタイプの交換品を使って注文をすり抜けようとしています。ここで

は、一例として

 
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にnullがある場合、最も近いrank1の最も近いrank2を取得します。

私はこれが「完璧」であるとは思っていませんが、rank1をソートするだけでは不十分です。

答えて

0

あなたが何を求めているかわからない。それが最初のnull以外の値を返すCOALESCE(rank1、rank2、rankX)はあなたのために働くでしょうか?

+0

私はそうは思わない、私はすべての行を取得しようとしている、と私が理解するから、COALESCEは私に最初の非null値を与えるだけです。私は最も近い非null値を取得しようとしています。私はサンプルデータで質問を編集しています。 – pedalpete

関連する問題