6

次のような結果セットがあります。

ID | name  | myvalue
 1 | A1    | 22
 2 | A2    | 22
 3 | A3    | 21
 4 | A4    | 33
 5 | A5    | 33
 6 | A6    | 10
 7 | A7    | 10
 8 | A8    | 10
 9 | A9    | 5

私が望むのは、利用可能な最高の「myvalue」を含む行のみを含めることです(前の例では33です)。次に:

ID | name  | myvalue
 4 | A4    | 33
 5 | A5    | 33

IE クエリは、利用可能な最大の "myvalue" (IE 33) を選択する必要があり、myvalue < 33 を持つ行を削除する必要があります

SELECT ..... WHERE myvalue = THE_HIGHEST_OF(myvalue)

明確であることを願って...

前もって感謝します


編集:

私の現在のクエリは

SELECT 
    *,
    (very long code that returns a integer as relevance score) AS myvalue
FROM
    mytable
HAVING
    myvalue = ?????
ORDER BY
    myvalue DESC

現在、最高の myvalue は 10、20、30、任意の数値にすることができます...最終的な結果セットには、可能な限り最高の関連性スコアを持つ行のみを含めたい

GROUP BY を使用してみましたが、常に繰り返す必要があります...

    (very long code that returns a integer as relevance score) AS myvalue

...2回

4

5 に答える 5

13
SELECT * FROM t WHERE myValue IN (SELECT max(myValue) From t);

###この SQLFiddle を参照してください

編集:

OPとの議論による。OPは、句でエイリアス を使用したいと考えています。ただし、列の別名は、、または句WHEREでのみ使用できます。この答え を見てください。GROUP BYORDER BYHAVING

于 2012-09-04T05:38:00.013 に答える
5

これを試して、

SELECT  *
FROM    tableName
WHERE   myValue = (SELECT max(myValue) From tableName)

SQLFiddle デモ

DDLのhims056に感謝

于 2012-09-04T05:30:19.867 に答える
3
SELECT 
    *,
    (very long code that returns a integer as relevance score) AS myvalue
FROM
    mytable
HAVING
    myvalue = MAX(myvalue)
于 2013-07-25T10:48:10.950 に答える
3
select * 
from mytable a
where my_value = (select max(myvalue) from my_table b 
                  --where  b.name = a.name
                  )

(コメント付きのコードを使用すると、名前ごとに最大値が取得されます:))

于 2012-09-04T05:31:20.817 に答える
1

別の方法は次のとおりです。

select * 
from myTable m1 
where not exists (select 1 from myTable where myValue > m1.myValue)
于 2012-09-04T05:34:27.273 に答える