0

あるデータベースから別のデータベースに大量のデータをダンプするメンテナンス スクリプトがあります。

私はデータを取得しようとしています

  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つの問題があると思います。

  1. ネストされたselectステートメントで使用するrank2があるとは思わない
  2. 「現在に最も近づく」と言う方法がわかりません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でソートするよりはましです。

4

1 に答える 1

0

私はあなたが何を求めているのか100%確信が持てません。最初の null 以外の値を返す COALESCE(rank1, rank2, rankX) は機能しますか?

于 2009-08-27T03:17:30.163 に答える