给出 GBQ 中的下表
Element, tmed, ingestion_time
Item1, 10.0, 2023-01-01
Item1, 11.0, 2023-01-02
Item2, null, 2023-01-02
Item2, 20.0 ,2023-01-03
Item3, 21.0, 2023-01-03
Item3, null, 2023-01-04
Item4, null, 2023-01-04
Item4, null, 2023-01-05
我想检索最新的非空值(以及最新的ingestion_time)。这将检索以下结果:
Element, tmed, ingestion_time
Item1, 11.0, 2023-01-02
Item2, 20.0, 2023-01-03
Item3, 21.0, 2023-01-03
Item4, null, 2023-01-05
为此,我使用了聚合函数 ANY_VALUE
,即使文档没有非常清楚地显示,它也会采用第一个非空值(检查讨论 here )尽管如此,它只采用第一个非空值,与 DATETIME 字段ingestion_time无关。
我尝试了不同的 ORDER BY
选项,但没有成功。
最佳答案
您可以使用ROW_NUMBER
QUALIFY
内的窗口函数条款如下:
- 对元素进行分区
- 在
tmed is NULL
上排序(拉低您的空值),ingestion_time DESC
(拉高您的日期)
SELECT *
FROM tab
QUALIFY ROW_NUMBER() OVER(PARTITION BY Element ORDER BY tmed IS NULL, ingestion_time DESC) = 1
关于sql - 第一个非空值(有序)聚合函数 (GBQ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75108101/