MYSQL从两列中选择MAX

MYSQL从两列中选择MAX,mysql,max,Mysql,Max,我有一个包含列的表: col1 col2 col3 col4 entryId 1 2 abc 123 1 4 1 abc 234 2 4 2 abc 234 3 2 1 abc 456 4 2 2 abc 456 5 1 2 qwe 567 6 4 1 qwe 678 7 5 2 qwe 789 8

我有一个包含列的表:

col1  col2  col3  col4  entryId
1     2     abc   123   1
4     1     abc   234   2
4     2     abc   234   3
2     1     abc   456   4
2     2     abc   456   5
1     2     qwe   567   6
4     1     qwe   678   7
5     2     qwe   789   8
我需要一个mysql查询来检查给定的col4值。如果找到,则返回col2最大的行。如果未找到任何列,则返回给定列3(abc)的列1最大(然后是最大列2)的行

例如:

如果搜索col4=456和col3=abc,输出将是:2,2,abc,456,4


如果搜索col4=891和col3=abc,输出结果将是:4,2,abc,234,3

您应该使用
排序依据

运行
从表中选择*,其中col4=456,col3='abc'顺序按col2 DESC LIMIT 1
。如果未找到任何记录,则从表中运行
SELECT*,其中col3='abc'顺序按col1 DESC,col2 DESC LIMIT 1

编辑:如果您只想使用一个SQL查询,您可以根据使用
UNION ALL
组合这两个SQL查询


希望,它能工作

请解释一下“对于给定的col3(abc)”是什么意思好吗?我总是知道col3值,所以它应该在WHERE语句中。col4=891没有显示在示例数据中,您可以为它添加数据,还是提供其他示例输出?我刚刚运行了一个测试,但是它总是返回col1值99。我假设这与列数据类型VARCHAR而不是INT有关。您可以按VARCHAR排序吗?
SELECT * FROM table where EXISTS (SELECT * FROM table WHERE col4 = @col4 ) AND 
col4 = @col4 ORDER BY col2 DESC LIMIT 1

SELECT * FROM table where NOT EXISTS (SELECT * FROM table WHERE col4 = @col4 ) 
AND col4 = @col4 ORDER BY col1 DESC, col2 DESC LIMIT 1