sql - 将行与排名合并

标签 sql group-by amazon-redshift gaps-and-islands

当前:

Current

当 RNK 为 1 时,则如图所示合并 ID,否则如果 RNK 为 0,则保持原样。

请帮忙看看该怎么做。

必填:

Required

最佳答案

这是一个间隙和岛屿问题。但是,当 rnk = 1 时,您实际上只关心岛屿。因此,计算它们的一种便捷方法是 rnk = 0 的累积和。然后剩下的就是聚合并组合 ids:

select (case when min(id) = max(id) then min(id)
             else min(id) || '-' || max(id)
        end) as id,
       rnk
from (select t.*, sum(1 - rnk) over (order by id) as grp
      from t
     ) t
group by grp, rnk
order by min(id);

Here是一个数据库<> fiddle 。

关于sql - 将行与排名合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61375332/

相关文章:

sql - TSQL 选择删除

php - 选择匹配 1 到多个字段的用户并删除重复项

sql - 如何计算每组的百分比?

SQL。列最大

php - MySQL 通过匹配它们的 id 来组合两个表字段

sql - 在 JOIN 之后选择 DISTINCT 值

r - 如何使用 R 和 dplyr 从 Redshift 检索超过 100000 行

amazon-redshift - Redshift-多列至行(不可透视)

amazon-redshift - Amazon Redshift:删除表(如果存在)

sql - 将日期时间存储过程参数转换为动态 T-SQL 查询中的过滤器(在 WHERE 子句中)