查询以搜索行中的最大值,而不是列中的最大值-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和最小值的注释