If there are numbers in those columns, you could come up with some kind of a formula that will be unique and well ordered for the major, minor, revision values. E.g. if the numbers are less than 10, you could just append them as strings, and compare them, like:
select name, major, minor, revision,
concat(major, minor, revision) as version
from versions
If they are numbers that will not be larger than 100, you could do something like:
select name, major, minor, revision,
(major * 10000 + minor * 100 + revision) as version
from versions
You could than just get the max of version grouped by name, like this:
select name, major, minor, revision
from (
select name, major, minor, revision,
(major * 10000 + minor * 100 + revision) as version
from versions) v1
where version = (select max (major * 10000 + minor * 100 + revision)
from versions v2
where v1.name = v2.name)