1

最大値と等しい値を持つ一時テーブルからすべての行を選択したいと思います。

一時テーブルのテスト

id | value
1  | 7
2  | 6
3  | 7

期待される結果:

id | value
1  | 7
3  | 7

私はすでにいくつかのことを試しましたが、「同じクエリで TEMPORARY テーブルを複数回参照することはできません」という理由で、これまでのところすべての試み (同じ内容の別の一時テーブルを作成することを除く) が失敗しました。(ソース: http://dev.mysql.com/doc/refman/5.0/en/temporary-table-problems.html )。テーブルとその内容をコピーするよりも「エレガントな」方法でこれを行う可能性はありますか?

これまでにテストしたこと:

SELECT table1.* FROM test table1 LEFT JOIN test table2 ON table1.value < table2.value     
WHERE table2.value IS NULL;
SELECT * FROM test WHERE value = (SELECT MAX(value) FROM test);

そして、これが私の現在の解決策です:

CREATE TEMPORARY TABLE test2 (...);
INSERT INTO test2 SELECT * FROM test;
SELECT * FROM test WHERE value = (SELECT MAX(value) FROM test2);
4

3 に答える 3

2

変数を使用してみることができます。以下は、テストテーブルを 1 回だけスキャンします (テストされていません)。

SELECT   test.*, 
         @curMax := IF(@curMax = -1, value, @curMax)
FROM     test,
         (SELECT @curMax := -1) r
HAVING   @curMax = value OR @curMax = -1
ORDER BY value DESC;
于 2012-07-08T15:12:10.960 に答える
1

これはどう:

SELECT MAX(value) INTO @max
FROM test;

SELECT *
FROM test
WHERE value = @max;
于 2012-07-08T15:32:52.907 に答える
0
Select id,value From SomeTable
inner Join (Select Max(SomeValue) as MaximumValue From SomeTable) maximums
  On SomeTable.Value = maximums.MaximumValue

仕事をすべき

于 2012-07-08T15:11:59.920 に答える