如何从Big Query中的值列中获取第一个非空值?

Tej*_*eja 5 sql bigdata google-bigquery

我试图从基于时间戳的值列中提取第一个非空值。有人可以分享您对此的想法。谢谢。

到目前为止,我尝试了什么?

FIRST_VALUE( column ) OVER ( PARTITION BY id ORDER BY timestamp) 
Run Code Online (Sandbox Code Playgroud)

Input :-

id,column,timestamp
1,NULL,10:30 am
1,NULL,10:31 am
1,'xyz',10:32 am
1,'def',10:33 am
2,NULL,11:30 am
2,'abc',11:31 am

Output(expected) :-
1,'xyz',10:30 am
1,'xyz',10:31 am
1,'xyz',10:32 am
1,'xyz',10:33 am
2,'abc',11:30 am
2,'abc',11:31 am
Run Code Online (Sandbox Code Playgroud)

Mik*_*keD 5

你可以像这样修改你的sql来得到你想要的数据。

FIRST_VALUE( column )
  OVER ( 
    PARTITION BY id
    ORDER BY
      CASE WHEN column IS NULL then 0 ELSE 1 END DESC,
      timestamp
  )
Run Code Online (Sandbox Code Playgroud)


ram*_*a_k 2

据我所知,Big Query 没有“IGNORE NULLS”或“NULLS LAST”等选项。鉴于此,这是我能想到的最简单的解决方案。我希望看到更简单的解决方案。假设输入数据在表“original_data”中,

select w2.id, w1.column, w2.timestamp
from
(select id,column,timestamp
   from
     (select id,column,timestamp, row_number() 
                   over (partition BY id ORDER BY timestamp) position
       FROM original_data
       where column is not null
    )
   where position=1 
) w1
right outer join
 original_data as w2
on w1.id = w2.id 
Run Code Online (Sandbox Code Playgroud)