如何根据 Where 条件获取 Redshift 中的上述值?

Posted

技术标签:

【中文标题】如何根据 Where 条件获取 Redshift 中的上述值?【英文标题】:How to get the preceding values in Redshift based on Where condition? 【发布时间】:2021-03-17 21:30:45 【问题描述】:

我有三个列,一个学生名、列_1、列_2。我想在第 2 列中存在 0 的地方打印前面的值。

我想要像下面这样的输出,我使用了滞后功能。可能我用错了。

【问题讨论】:

"preceding" 表示有排序。 SQL 表表示无序(多)集。没有排序。除非列指定了排序。此外,您想要做什么的逻辑也很不清楚。预期列中的数字来自哪里? 【参考方案1】:

据我所知,您想要计算 0 值的数量,直到并包括每一行。如果这种解释是正确的,您将使用条件累积和:

select t.*,
       sum( (column1 = 0)::int ) over (partition by student
                                       order by <ordering column>
                                       rows between unbounded preceding and current row
                                      )
from t;

注意:这假设您有一个未包含在问题中的排序列。

【讨论】:

以上是关于如何根据 Where 条件获取 Redshift 中的上述值?的主要内容,如果未能解决你的问题,请参考以下文章

对 Redshift/Postgres 中的两个矛盾条件使用 WHERE EXISTS 语句?

如何为 Amazon redshift 数据库编写查询,使相关查询的 where 子句具有两个条件?

根据id获取数据

Cursor Select 语句 where 条件根据条件而变化

如何根据where条件值创建mysql查询结果?

如何在 Amazon Redshift 中获取电子邮件地址的第二部分或第一部分?