sql - Dense Rank Skip Null 值按多个分区
问题描述
我有一张如下所示的表格:
Date User Product
11/15/2019 123 NULL
11/21/2019 123 A
11/21/2019 123 A
11/23/2019 123 B
我想运行一个dense_rank 函数来跳过空值。
以下是我目前拥有的:
CASE WHEN PRODUCT IS NOT NULL
THEN DENSE_RANK()
OVER (PARTITION BY USER ORDER BY DATE ASC)
ELSE 1
END DENSE_RANK_OUTPUT
我当前的输出:
Date User Product DENSE_RANK_OUTPUT
11/15/2019 123 NULL 1
11/21/2019 123 A 2
11/21/2019 123 A 2
11/23/2019 123 B 3
我想要的输出是:
Date User Product DESIRED_OUTPUT
11/15/2019 123 NULL 1
11/21/2019 123 A 1
11/21/2019 123 A 1
11/23/2019 123 B 2
解决方案
You are close. Just use another key in the partition by
:
(CASE WHEN PRODUCT IS NOT NULL
THEN DENSE_RANK() OVER (PARTITION BY USER, (PRODUCT IS NOT NULL) ORDER BY DATE ASC)
ELSE 1
END) as DENSE_RANK_OUTPUT
推荐阅读
- grafana - 选择总 cpu 收集多个主机
- typescript - Stack.Screen 选项上的 Typescript 迁移引发错误
- r - 在 R 中分配数据框时,为什么会出现错误“'closure' 类型的对象不是子集”?
- python - 如何按块播放包含音频信号的numpy数组?
- python - Dockerize Angular 应用程序,它使用 Python 和 Oracle 作为后端
- sql - 如何从 postgresql 查询中的嵌套选择返回多列?
- azure-service-fabric - 长时间运行的服务结构参与者提醒回调
- javascript - 我将如何通过带有交换的数组直观地显示合并排序算法?
- r - 将 RSHINY 文本输入分配给变量以在源脚本中使用
- java - 如何解析多个值