我正在try 派生Snowflake SQL查询中的一个列,该列等同于R的tidyr包中的Fill函数.我添加了预期的输出列,当它伴随着future 的非空值时,基本上具有TIMESTAMP2值.我可以使用LAST_VALUE完成此操作,如下所述,但它也用6/7/23 3:21 AM填充了TIMESTAMP2的最后一行,而我期望那里有一个空值,因为它不会伴随future 的非空值.有人能分享一下他们对我所错过的这件事的看法吗?

LAST_VALUE(TIMESTAMP2 IGNORE NULLS) OVER (PARTITION BY A ORDER BY TIMESTAMP1 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

enter image description here

Group TIMESTAMP1        TIMESTAMP2       Expected Output
A     11/22/21 7:24 AM  6/16/22 7:26 AM  6/16/22 7:26 AM
A     10/11/22 6:46 AM  NULL             5/11/23 3:17 AM
A     10/11/22 6:47 AM  NULL             5/11/23 3:17 AM
A     10/11/22 6:47 AM  NULL             5/11/23 3:17 AM
A     10/11/22 6:50 AM  NULL             5/11/23 3:17 AM
A     10/11/22 6:51 AM  5/11/23 3:17 AM  5/11/23 3:17 AM
A     5/30/23 5:22 AM   6/7/23 3:21 AM   6/7/23 3:21 AM
A     10/24/23 7:19 AM  NULL             NULL```

推荐答案

ORDER BY位应按降序排列:

SELECT *, LAST_VALUE(TIMESTAMP2 IGNORE NULLS) 
               OVER (PARTITION BY Grp  ORDER BY TIMESTAMP1 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS EXPECTED
FROM mytable
ORDER BY TIMESTAMP1;

结果:

GRP TIMESTAMP1      TIMESTAMP2      EXPECTED
A   2021-11-22 7:24 2022-06-16 7:26 2022-06-16 7:26
A   2022-10-11 6:46 null            23-05-11 3:17
A   2022-10-11 6:47 null            23-05-11 3:17
A   2022-10-11 6:47 null            23-05-11 3:17
A   2022-10-11 6:50 null            23-05-11 3:17
A   2022-10-11 6:51 23-05-11 3:17   23-05-11 3:17
A   2023-05-30 5:22 23-06-07 3:21   23-06-07 3:21
A   2023-10-24 7:19 null            null

Demo on oracle 23

Sql相关问答推荐

获取家谱树中第一次出现的特定信息,然后停止

使用sede获取不一定有两个不同标签的所有问题

SQL基于多个值 Select 单行

如何在postgres函数中插入后返回布尔值?

我可以在SQLite3中使用BLOB作为主键吗?

Oracle PL/SQL:解决DBMS输出大小限制的问题

SQL仅返回第一个字母在A-Z之间的值

为什么SQL in中的空子查询有时被视为null

在SQL中转换差异表的多列

当我返回 sql 列时,有没有办法只反转数字? ( hebrew )

删除每个不同日期中未 Select 的最短最长时间

获取多个开始-结束时间戳集之间经过的时间

有没有办法在雅典娜中将字符串转换为 int ?

SQL的左连接在多对多关系情况下使用

如何在插入时将字符串'03-January-2023'转换为日期时间

查询以查找今天和昨天的数据之间的差异以及伪列

HIVE SQL where 子句未按预期工作

如何将 CONCATENATED 值与临时表中的值匹配

如果当前日期是一周中的某一天,则从另一天提取结果

如何刷新在视图之上创建的表