【问题标题】:Finding adjacent column values from the last non-null value of a certain column in Snowflake (SQL) using partition by使用 partition by 从 Snowflake (SQL) 中某个列的最后一个非空值中查找相邻列值
【发布时间】:2021-12-11 03:37:13
【问题描述】:

假设我有下表:

ID T R
1 2
1 3 Y
1 4
1 5
1 6 Y
1 7

我想根据列 R 的最后一个非空值添加一个等于列 T 的值的列。这意味着以下内容:

ID T R GOAL
1 2
1 3 Y
1 4 Y 3
1 5 4
1 6 Y 4
1 7 6

我确实有很多 ID,所以我需要使用 OVER (PARTITION BY ...) 子句。另外,如果可能的话,我想使用一个语句,比如

SELECT *
,      GOAL
FROM TABLE

所以没有任何额外的选择语句。

【问题讨论】:

  • 请确保标记正确。 (MS) SQL Server 雪花。我为你删除了 SQL Server 标记。
  • 你的输出中的 4 不应该是 3 吗?或者至少需要将输入表中的R 值更正为4?
  • 没有输出正确,我想要 T 的值对应于列 R 中的最后一个非空值

标签: sql sql-server snowflake-cloud-data-platform partition-by


【解决方案1】:

T 是按升序排列的,所以只需根据R 将其归零,然后向后看即可。

select *,
    max(case when R is not null then T end)
      over (
        partition by id
        order by T
        rows between unbounded preceding and 1 preceding
    ) as GOAL
from TBL

http://sqlfiddle.com/#!18/c927a5/5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2011-01-03
    相关资源
    最近更新 更多