sql - 第一个非空值(有序)聚合函数 (GBQ)

标签 sql google-bigquery

给出 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/

相关文章:

sql - 不同的命令不起作用

mysql - SQL - 'partial' 分组依据,不同列的不同行为

google-bigquery - BQ 项目中表数量的硬性限制

sql - SQL Server 中的日期计数

sql - 如何从 SQL 查询生成字母数字值?

python - 如何将 Csv 文件流式传输到 BigQuery?

google-bigquery - Google BigQuery - 嵌套字段或表连接

google-analytics - GA4 'items' 可以添加自定义参数吗?

mysql - 将相似的 URL 分组

PHP/SQL - 乘以主键(重复更新)