我有这样的表
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()来解决问题......我的左连接数很少等...
任何想法?
致以最诚挚的问候,谢谢您的时间!
答案 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
结果:
| 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