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