SQL Databricks - LAG 函数 BY 不同值

问题描述 投票:0回答:1

我有一个包含两列(数字和 id)的表,想要计算 value_needed 列。

列定义 - 将 8 替换为之前的数字 + 1。

但是通过使用简单的 LAG 函数,我收到了该输出:

数字 id 当前值 所需价值
1 123 1 1
1 123 1 1
2 123 2 2
8 123 3 3
8 123 9 3

我需要实现 value_needed 列(所有 8 个列都有“3”作为输出)

我的代码:

CASE WHEN number = 8 
           THEN LAG(number) OVER (PARTITION BY (id) ORDER BY number) + 1
           ELSE number

我需要在没有 WHERE 条件的 CASE 语句中定义它。我尝试添加分区时间的大小写,但它无法正常工作

sql window-functions databricks-sql
1个回答
0
投票

给定您的数据和所需的输出,听起来 DENSE_RANK() 是您想要的聚合窗口函数:

 DENSE_RANK() OVER (PARTITION BY id ORDER BY number)

使用示例数据的示例:

WITH cte AS (
  SELECT 1 as num, 123 as id 
  UNION ALL SELECT 1, 123
  UNION ALL SELECT 2, 123
  UNION ALL SELECT 8, 123 
  UNION ALL SELECT 8, 123 
)
SELECT num, id, DENSE_RANK() OVER (PARTITION BY id ORDER BY num) as value_needed
FROM cte

结果:

+-----+-----+--------------+
| num | id  | value_needed |
+-----+-----+--------------+
|   1 | 123 |            1 |
|   1 | 123 |            1 |
|   2 | 123 |            2 |
|   8 | 123 |            3 |
|   8 | 123 |            3 |
+-----+-----+--------------+
© www.soinside.com 2019 - 2024. All rights reserved.