给出以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),但是,它只获取第一个非空值,与日期时间字段ingestion_time无关. 我try 了不同的ORDER BY种 Select ,但都没有成功.

推荐答案

您可以在QUALIFY子句中使用ROW_NUMBER窗口函数,如下所示:

  • 对您的元素进行分区
  • 订购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相关问答推荐

Trino/Presto sq:仅当空值位于组中第一个非空值之后时,才用值替换空值

使用来自不同深度的嵌套组的值执行计算的干净方法?

使用Lead获取下一个不同的日期

一个SQL查询将在需要的地方多次返回同一成员

计算周时出现SQL错误结果

如果多行科目有一行在指定的日期范围内,如何 Select 该科目在该日期之前的所有行?

在Postgres中合并相似的表

数据库SQL-CTE命名空间(错误?)使用临时视图

SQL到Snowflake-转换嵌套的SELECT(值

需要从键-值对数据中提取值

配置单元查询失败:无法识别';附近的输入;LEFT'';(select子句中的';';col'

根据标识符将两行合并为一行

SQL SUM Filter逻辑解释

Spark / Hive:如何获取列中正值的百分比?

没有调用子查询的嵌套 JOIN语法是什么?

如何为给定的股票数据集计算利润/亏损,确保先卖出先买入的股票

如何在sparksql查询中使用日期值?

使用 GROUP BY 时如何创建其他组?

ACCESS SQL - 有没有办法使用通配符仅 Select 字段的特定部分?

从不同的表中 Select 包含单词列表的记录