MySql - 从每列中的最新非空值获取一行

时间:2011-04-18 15:59:57

标签: mysql null row

我有一个表,我想得到一行包含每列的所有最新的非null属性(不为每列组合单独的查询,这对我来说似乎不优雅)。

示例:

A     B     C     Time
1     a     7     0
NULL  NULL  3     1
3     NULL  4     2
NULL  NULL  6     3

我寻求的结果:

A     B     C
3     a     6

正如我所说的,我知道如何分别为每个列选择我想要的内容,但我想知道是否有更好的方法来实现它。如果不需要,则无需对可怜的数据库征税。

1 个答案:

答案 0 :(得分:3)

可能比这更好的方式,但是周一,我还没有意识到:

select @a:=null, @b:=null, @c:=null;
select A,B,C from (
    select @a:=coalesce(A,@a) as A, @b:=coalesce(B,@b) as B, @c:=coalesce(C,@) as C time
    from yourtable
    order by time asc
) as y order by time desc limit 1;

基本上,遍历数据库中的每一行并随时构建“最新”值,然后反转结果集并仅选择时间值最高的那个