Snowflake按Group分区计算Next与Current列的差值
按分组计算Next与Current差值的解决方案
原始数据
| Group | Date | Current | Next |
|---|---|---|---|
| A | 03/09/2020 | 4 | 7 |
| A | 04/09/2020 | 2 | 4 |
| A | 05/09/2020 | 4 | null |
| B | 17/08/2020 | 4 | 9 |
| B | 19/08/2020 | 4 | null |
澄清误区
你对窗口函数的理解存在偏差:窗口函数并非只能搭配SUM、COUNT、MAX、MIN这类聚合函数使用,但针对你的需求,其实完全不需要窗口函数。
直接计算Next - Current时,是逐行独立执行的,不会把整个数据集视为一组——每行的Next和Current都属于当前行所在的分组,计算结果自然会按组呈现。
实现SQL
以MySQL为例,执行以下查询即可得到目标结果:
SELECT `Group`, Date, Current, Next, -- 当Next为null时返回null,否则计算差值 CASE WHEN Next IS NOT NULL THEN Next - Current ELSE NULL END AS Diff FROM your_table;
最终输出
| Group | Date | Current | Next | Diff |
|---|---|---|---|---|
| A | 03/09/2020 | 4 | 7 | 3 |
| A | 04/09/2020 | 2 | 4 | 2 |
| A | 05/09/2020 | 4 | null | null |
| B | 17/08/2020 | 4 | 9 | 5 |
| B | 19/08/2020 | 4 | null | null |
内容的提问来源于stack exchange,提问作者YoungboyVBA
相关产品推荐
相关产品推荐

