Schema and insert statements:
create table mytable (value1 varchar(50), value2 int, value3 varchar(50));
insert into mytable values('foo', 7, 'something4');
insert into mytable values('foo', 5, 'something1');
insert into mytable values('foo', 12, 'anything3');
insert into mytable values('bar', 3, 'something7');
insert into mytable values('bar', 18, 'anything5');
insert into mytable values('bar', 12, 'anything8');
insert into mytable values('baz', 99, 'anything9');
insert into mytable values('baz', 100, 'something0');
Query#1 (using inner join)
select m.* from mytable m inner join
(select value1, max(value2) maxvalue2 from mytable group by value1) m2
on m.value1=m2.value1 and m.value2=m2.maxvalue2
Output:
value1 |
value2 |
value3 |
foo |
12 |
anything3 |
bar |
18 |
anything5 |
baz |
100 |
something0 |
Query#2 (using subquery in where clause)
select m.*
from mytable m
where m.value2 = (select max(m2.value2) from mytable m2 where m2.value1 = m.value1);
Output:
value1 |
value2 |
value3 |
foo |
12 |
anything3 |
bar |
18 |
anything5 |
baz |
100 |
something0 |
db<fiddle here