0

これは私のテーブルです:

ここに画像の説明を入力してください

そこからコードと番号を選択したいのですが、これは私のクエリの視覚化です。

ここに画像の説明を入力してください

そしてこれはクエリです:

SELECT Code,Number,(1894 - Limit1) AS spread1,(Limit2 - 1894) AS spread2 
FROM MyTable WHERE Name="John" AND 600>=L1 AND 600<=L2 
AND 1894>=Limit1 AND 1894<=Limit2

写真に示されているように、このクエリは2つの値を返し、必要なのは1つだけです。したがって、row1のspread2とrow2のspread1を比較しコードより大きなスプレッドの数を取得する必要があります。この場合はです。spread2

row1のspread2とrow2のspread1を比較しているのは、それらが重複しているためです。だから、私はそのオーバーラップ内のスプレッドを比較しています:

ここに画像の説明を入力してください

上記のクエリでは、結果として1行または2行しか取得できず、それ以上は取得できません。なんで?テーブルはそのように作成されるからです。結果として1つの行が表示された場合、比較は必要ありません。つまり、コードと番号が1つしかないということです。

したがって、最終的には、上記のことを行うためにクエリを拡張する必要があります。

私が試したことは、次を追加することです。

ORDER BY (spread2,spread1) DESC LIMIT 1

同じ行の値が欲しいので、値を比較しないと確信しています。

4

1 に答える 1

0

解決しました!

Value1=600およびValue2=1894の場合:

SELECT number,code,(spread2)AS spread FROM(SELECT number,code,@curRow := @curRow + 1 AS RowNumber, (1894 - Limit1) AS spread1,(Limit2 - 1894) AS spread2
FROM MyTable JOIN (SELECT @curRow := 0) r WHERE name="John" AND 600>=L1 AND 600<=L2 AND 1894>=Limit1 AND 1894<=Limit2)temp WHERE RowNumber=1
UNION
SELECT number,code,(spread1)AS spread FROM(SELECT number,code,@curRow := @curRow + 1 AS RowNumber, (1894 - Limit1) AS spread1,(Limit2 - 1894) AS spread2
FROM MyTable JOIN (SELECT @curRow := 0) r WHERE name="John" AND 600>=L1 AND 600<=L2 AND 1894>=Limit1 AND 1894<=Limit2)temp WHERE RowNumber=2
ORDER BY spread DESC limit 1

Value1=950およびValue2=2400の場合:

SELECT number,code,(spread2)AS spread FROM(SELECT number,code,@curRow := @curRow + 1 AS RowNumber,(2400 - Limit1) AS spread1,(Limit2 - 2400) AS spread2
FROM MyTable JOIN (SELECT @curRow := 0) r WHERE name="John" AND 950>=L1 AND 950<=L2 AND 2400>=Limit1 AND 2400<=Limit2)temp WHERE RowNumber=1
UNION
SELECT number,code,(spread1)AS spread FROM(SELECT number,code,@curRow := @curRow + 1 AS RowNumber,(2400 - Limit1) AS spread1,(Limit2 - 2400) AS spread2
FROM MyTable JOIN (SELECT @curRow := 0) r WHERE name="John" AND 950>=L1 AND 950<=L2 AND 2400>=Limit1 AND 2400<=Limit2)temp WHERE RowNumber=2
ORDER BY spread DESC limit 1

そして、結果として1つの行を取得したときにも機能します。

于 2012-12-13T09:01:25.823 に答える