2

これが私のシナリオの説明です:

myTable

ID name width1 width2 parameter1 parameter2 code
1  AAA  0      10     500        750        10001
2  AAA  0      10     750        1250       10002 
3  AAA  0      10     900        1400       10003
4  AAA  0      10     1150       1650       10004
.................................................
.................................................
.................................................

独自のプロパティを持ついくつかの「サブジェクト」を使用しているとしましょう。サブジェクトプロパティと同じプロパティを使用したいくつかの計算に基づいて、このテーブルから「コード」を取得する必要があります。

したがって、私が現在取り組んでいるこの1つのサブジェクトの名前は、 AAA、幅:5であり、計算では、パラメーター:1000を取得します。必要な属性をすべて取得したら、それらをmyTableの行と比較できます。全体像については、この表からすべてを選択しますが、私の目標はコードを取得することです。そのためのクエリは次のとおりです。

SELECT * FROM myTable WHERE name="AAA" AND 5>=width1 AND 5<=width2 AND 1000>=parameter1 AND 1000<=parameter2

この後、次の2つの行を取得します。

ID name width1 width2 parameter1 parameter2 code
2  AAA  0      10     750        1250       10002 
3  AAA  0      10     900        1400       10003

言うまでもなく、ここに1つの行があります。しかし、2つの行を取得した場合は、次のようにする必要があります。私の全体的な集中力は、最初の行のパラメーターとパラメーター2の間の広がりと、2番目の行のパラメーターとパラメーター1の間の広がりを比較する方法でこれらのパラメーターに集中しています。

parameter -> parameter2
1250 - 1000 = 250
&
parameter1 -> parameter
1000 - 900 = 100

したがって、spread1:250> Spread2:100の場合はcode2:00002を取り、それ以外の場合はcode3:00003を取ります。

私の質問は、異なる行と列の値を比較する方法ですか?ご覧のとおり、2つの行と異なる列の値があります。私が必要としているのは、比較のためにこれらの特定の値を選択する方法です。

ありがとうございました。

4

1 に答える 1

2

Greatest from Leastによって解決されるように思われるので、最初は最小の値を取得して、この降下を注文します。

SELECT 
  code
FROM 
  myTable 
WHERE 
  name="AAA" 
AND 
  5 >= width1 
AND 
  5 <= width2 
AND 
  1000 >= parameter1 
AND 
  1000 <= parameter2
ORDER BY 
  Least( parameter2-1000, 1000-parameter1 ) desc
LIMIT 1;

SQLフィドル

于 2012-11-10T10:24:30.423 に答える