2010-05-21 66 views
1

我有以下简单的SQL statmentMYSQL选择statment以便能够通过与集团通过

SELECT id, name, value_name, value_id 
FROM table 
GROUP BY id 
ORDER BY value_id DESC 

分组我想获得其中value_id是最大的元组的值名称和value_id时。它的方式是我获得最小的价值。例如

1, name1, valuename, 3  (where i know that there is a value_id of 5) 

你能帮忙吗?

回答

4

变化, value_id在字段列表, MAX(value_id) AS value_id ...

其实,现在我看的话,我想你想要的是这样的:

SELECT a.id, a.name, MAX(b.value_id) AS value_id, (SELECT b.value_name FROM table AS b WHERE b.id = a.id AND b.value_id = MAX(a.value_id)) AS value_name 
FROM table AS a 
GROUP BY a.id, a.name 
ORDER BY value_id DESC 

的问题是,表格未完全标准化。因此,您有多个id与name相同的行,但每个行都有唯一的value_id和value_name。因此,唯一的方式来获得与value_id相关的值名称是既可以通过一个子查询(我做什么有),或加入...

+0

您将需要按其他非聚合字段进行分组。 – 2010-05-21 18:52:52

+0

@irchmaxell他仍然需要将name和value_name添加到他的group by子句中。 – AieshaDot 2010-05-21 18:52:57

+0

实际上,我只是意识到他要求与MAX关联的value_name(value_id)。编辑答案对应... – ircmaxell 2010-05-21 19:05:22

1
SELECT id, name, value_name, MAX(value_id) 
FROM table 
GROUP BY id, name, value_name 
ORDER BY value_id DESC 
-1

您可以通过这一说法得到最大value_id:

SELECT id, name, value_name, value_id 
FROM table 
GROUP BY value_id 
HAVING max(value_id) 

如果你想获得其他列,你可以使用它的子查询。