查询以搜索行中的最大值,而不是列中的最大值-SQL/MySQL

查询以搜索行中的最大值,而不是列中的最大值-SQL/MySQL,sql,mysql,max,Sql,Mysql,Max,好的,我在一张桌子上有一行。此行有八个日期类型字段 我试图编写一个查询,从一行返回最高的日期值 例如: NULL,NULL,2009-10-09,2010-03-12,2010-04-15,2010-06-23,2010-08-27,NULL 对上表运行查询时,此行将返回以下值:2010-08-27 我用CASE尝试了几个组合,但它似乎不雅观且冗长(因此我还没有完成查询的编写) 我还有其他选择吗?或者某人是否有一个已成功运行的解决方案 感谢您提供的任何帮助。:) 您想要: 注意数据类型

好的,我在一张桌子上有一行。此行有八个日期类型字段

我试图编写一个查询,从一行返回最高的日期值

例如:

    NULL,NULL,2009-10-09,2010-03-12,2010-04-15,2010-06-23,2010-08-27,NULL
对上表运行查询时,此行将返回以下值:2010-08-27

我用CASE尝试了几个组合,但它似乎不雅观且冗长(因此我还没有完成查询的编写)

我还有其他选择吗?或者某人是否有一个已成功运行的解决方案

感谢您提供的任何帮助。:)

您想要:

注意数据类型-不要比较应该是日期等的字符串

遗憾的是SQL Server没有它,但感谢Oracle和PostgreSQL有它。

您想要:

注意数据类型-不要比较应该是日期等的字符串

遗憾的是SQL Server没有,但谢天谢地Oracle和PostgreSQL有

遗憾的是SQL Server没有,但谢天谢地Oracle和PostgreSQL有

但是SQLServer允许其他事情,比如不带表进行选择(没有“FROM DUAL”业务;MySQL也支持这一点)以及引用表2级别的子查询,如下面的查询

select a,b,c,d,
    (
    select max(a)
    from
        (select a union all
         select b union all
         select c union all
         select d) columnstorows
    ) greatest
from (select 1 as a,2 as b,null as c,4 as d) virtualtable
没有ISNULL业务,只是一个直接的最大值

正如OMG Ponies所提到的,MySQL在每个列周围都需要IFNULL。但即便如此,这也不是全部答案。如果使用IFNULL并为每个值提供“虚拟最小值”,那么当所有值都为null时,可能会得到错误的答案。您应该将它们设置为另一列,或者旋转它们,或者任何其他列都可以

select
a,b,c,d,
greatest(ifnull(a,b), ifnull(b,c), ifnull(c,d), ifnull(d,a))
from (select 1 as a,2 as b,null as c,4 as d) virtualtable
遗憾的是SQL Server没有,但谢天谢地Oracle和PostgreSQL有

但是SQLServer允许其他事情,比如不带表进行选择(没有“FROM DUAL”业务;MySQL也支持这一点)以及引用表2级别的子查询,如下面的查询

select a,b,c,d,
    (
    select max(a)
    from
        (select a union all
         select b union all
         select c union all
         select d) columnstorows
    ) greatest
from (select 1 as a,2 as b,null as c,4 as d) virtualtable
没有ISNULL业务,只是一个直接的最大值

正如OMG Ponies所提到的,MySQL在每个列周围都需要IFNULL。但即便如此,这也不是全部答案。如果使用IFNULL并为每个值提供“虚拟最小值”,那么当所有值都为null时,可能会得到错误的答案。您应该将它们设置为另一列,或者旋转它们,或者任何其他列都可以

select
a,b,c,d,
greatest(ifnull(a,b), ifnull(b,c), ifnull(c,d), ifnull(d,a))
from (select 1 as a,2 as b,null as c,4 as d) virtualtable

因此,我认为空值将抛出此函数是正确的?@Linnay:取决于版本--有关详细信息,请参阅文档。对于5.0.13+,请尝试使用COALESCE或在每个列引用周围使用,以将值设置为可靠的最小值。谢谢mate.)非常感谢你的帮助。已从使用MSSQL迁移到MySQL,因此我仍然不知道一些函数。请参阅我回答中有关IFNULL和最小值的注释。如果我认为NULL值将抛出此函数,则我是正确的?@Linnay:取决于版本--有关详细信息,请参阅文档。对于5.0.13+,请尝试使用COALESCE或在每个列引用周围使用,以将值设置为可靠的最小值。谢谢mate.)非常感谢你的帮助。已经从使用MSSQL迁移到MySQL,所以我仍然不知道一些函数。请参阅我回答中有关IFNULL和最小值的注释