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