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

您可以尝试使用变量。以下将仅扫描测试表一次(未测试):

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 回答