私は、あるデータベースから別のデータベースにデータの束をダンプする保守スクリプトを持っています。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つの問題があると考えています。
- 私はネストされたselect文
- で使用されるランク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をソートするだけでは不十分です。
私はそうは思わない、私はすべての行を取得しようとしている、と私が理解するから、COALESCEは私に最初の非null値を与えるだけです。私は最も近い非null値を取得しようとしています。私はサンプルデータで質問を編集しています。 – pedalpete