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)
你可以像这样修改你的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)
据我所知,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)