我有一个表,我想得到一行包含每列的所有最新的非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
正如我所说的,我知道如何分别为每个列选择我想要的内容,但我想知道是否有更好的方法来实现它。如果不需要,则无需对可怜的数据库征税。
答案 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;
基本上,遍历数据库中的每一行并随时构建“最新”值,然后反转结果集并仅选择时间值最高的那个