MySQL SELECT唯一列,其他列为max

时间:2013-01-04 15:15:45

标签: mysql select unique max

我有这样的表

  id     |     serial_num     |      version     | .....
  1      |         1          |          1       | .....
  2      |         2          |          1       | .....
  3      |         2          |          2       | .....
  4      |         3          |          1       | .....
  5      |         4          |          1       | .....
  6      |         5          |          1       | .....
  7      |         5          |          2       | .....
  8      |         5          |          3       | .....

现在我想要选择的是获取具有最大版本和唯一serialn_num的行......

结果将是:

  id     |     serial_num     |      version     | .....
  1      |         1          |          1       | .....
  3      |         2          |          2       | .....
  4      |         3          |          1       | .....
  5      |         4          |          1       | .....
  8      |         5          |          3       | .....

我的SQL有点复杂,这就是为什么我没有通过使用MAX()来解决问题......我的左连接数很少等...

任何想法?

致以最诚挚的问候,谢谢您的时间!

3 个答案:

答案 0 :(得分:6)

试试这个:

SELECT yourtable.*
FROM yourtable
WHERE (serial_num, version) in (select serial_num, max(version)
                                from yourtable
                                group by serial_num)

子查询将返回serial_num的最大版本,因此这将返回serial_num具有最大值的所有行。请参阅this fiddle

答案 1 :(得分:2)

您可以使用子查询查找最大值,然后重新连接到您的表:

select t1.id,
  t1.serial_num,
  t1.version
from yourtable t1
inner join
(
  select serial_num, 
    max(version) version
  from yourtable
  group by serial_num
) t2
  on t1.serial_num = t2.serial_num
  and t1.version = t2.version

请参阅SQL Fiddle with Demo

结果:

| ID | SERIAL_NUM | VERSION |
-----------------------------
|  1 |          1 |       1 |
|  3 |          2 |       2 |
|  4 |          3 |       1 |
|  5 |          4 |       1 |
|  8 |          5 |       3 |

答案 2 :(得分:0)

按查询选择组id是没用的。您应该只选择在分组中使用的列和正在应用聚合函数的其他列。

希望你this works

SELECT id, 
       serial_num, 
       Max(`version`) `version`
FROM   tbl1 
GROUP  BY serial_num