あるデータベースから別のデータベースに大量のデータをダンプするメンテナンス スクリプトがあります。
私はデータを取得しようとしています
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 が null でない最も近いランク 2 です。ランク1がランク2の効果的な代替品であると仮定しています
だから、私は2つの問題があると思います。
- ネストされたselectステートメントで使用するrank2があるとは思わない
- 「現在に最も近づく」と言う方法がわかりません
rank2<rank2
。
ランク 1 の値は 0 ~ 20,000 の範囲で、ランク 2 の範囲は 0 ~ 150,000 です (なぜそれが重要なのかわかりません)。ランク間に効果的な相関関係はありません。
ランク 1 は常により信頼性の高い数値ですが、多くの場合 null であるため、このタイプの代替品で注文をごまかそうとしています。
例として使用するサンプル データを次に示します。
ID ランク1 ランク2 1 120,000 14,000 2 120,000 18,420 3 126,000 15,500 4 85,000ヌル 5 75,000 16,000 6 70,000 15,700 7 68,000 ヌル 8 42,000ヌル 9 26,000 ヌル 10 21,500 8,000
2、5、4、6、7、3、1、8、9、10の注文を取り戻したいと思っています。またはそれに近いもの。基本的に、ランク2にnullがある場合、最も近いランク1の最も近いランク2を取得します。
これが「完璧」であるとは思いませんが、ランク1でソートするよりはましです。