MySQL选择唯一列,其中其他列为最大值

MySQL选择唯一列,其中其他列为最大值,mysql,select,unique,max,Mysql,Select,Unique,Max,我有这样的桌子 id | serial_num | version | ..... 1 | 1 | 1 | ..... 2 | 2 | 1 | ..... 3 | 2 | 2 | ..... 4 |

我有这样的桌子

  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解决这个问题。。。我有几个左连接等

有什么想法吗

致以最良好的问候,感谢您抽出时间

试试这个:

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

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

您可以使用子查询查找最大值,然后返回到表:

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

结果:

| ID | SERIAL_NUM | VERSION |
-----------------------------
|  1 |          1 |       1 |
|  3 |          2 |       2 |
|  4 |          3 |       1 |
|  5 |          4 |       1 |
|  8 |          5 |       3 |
按查询为组选择id是无用的。您应该只选择在group by中使用的列以及应用于聚合函数的其他列

希望你


你能再解释一下结果吗,你想达到什么目的?当然。。。对不起,之前没有解释。。。它应作为一种修订系统,随附日期标记为。。在这一点上,我想选择所有新的数据最大版本,我希望它是唯一的序列号。。。我不想用MAX解决这个问题,因为我可能会得到错误的数据。。。假设按序列号从t组中选择id、MAXversion、MAXserial\u num可能会返回错误的id,因为它不在MAX中。。。我希望我解释得很好。如何确定为唯一序列号选择哪个id?e、 似乎每个唯一的序列号都是maxid,为什么不使用这个?按序列号从表组中选择id、序列号、maxversion作为版本!这张照片很有用。。。现在我再想想。。。我也有日期栏。。。在新年计数器上进行序列号重置。。。我也应该检查一下…@M.V.谢谢你的确认。这是我最初的疑问。我必须为您添加maxid。如果我还有日期值呢?有什么想法吗?它可以是日期、序列号、版本2012、1、1、2012、2、1、2013、1、1选择您的表格。*从您的表格中选择yeartime、序列号、选择yeartime中的版本、序列号、表格组中的maxversion by yeartime、序列号
SELECT id, 
       serial_num, 
       Max(`version`) `version`
FROM   tbl1 
GROUP  BY serial_num