【发布时间】:2016-09-14 04:51:53
【问题描述】:
请参考下表。我的表有 ID、ID_Type、Lag 和 Row_Num。我需要在下面创建“New_Col”列。我使用MAX窗口功能接近,但我仍然没有成功。任何帮助将不胜感激 - 如果窗口功能不是要走的路,我绝对愿意接受建议。
这是我用来得出下面示例表的 SQL:
SELECT ID,
ID_TYPE,
LAG(ID_TYPE) OVER (ORDER BY Row_Num) AS Lag,
Row_Num
FROM (SELECT ID,
CASE WHEN ID LIKE '%Exc%'
THEN ID
END AS ID_Type,
Row_Num
FROM Source_Table)
样本表:
ID ID_Type Lag Row_Num
Exc Exc 1
10R46 Exc 2
10R46 3
100R91 4
Non_Exc Non_Exc 5
10R91 Non_Exc 6
10M95 7
期望的输出:
ID ID_Type Lag New_Col Row_Num
Exc Exc 1
10R46 Exc Exc 2
10R46 Exc Exc 3
100R91 Exc 4
Non_Exc Non_Exc Non_Exc 5
10R91 Non_Exc Non_Exc 6
10M95 Non_Exc 7
【问题讨论】:
-
请提供用于创建源表的 SQL 和一些示例数据。看起来你在一条糟糕的道路上走了一半,并要求我们从那里继续前进。我的印象是,与您在这里开始的解决方案完全不同的解决方案将是最好的。
-
@iamdave,源表实际上是来自物业管理系统的计划(Excel)报告。我没有创建表格,而是将 Excel 文件加载到 Domo(BI 工具)中,然后将文件转换为表格。在 Domo 中,我可以使用 Redshift 或 MySQL 进行额外的 ETL 工作。
-
您的预期输出是什么?考虑输入样本数据..
-
@KannanKandasamy,“期望输出”中的“New_Col”是我希望实现的。
-
@izzy84,你能用简单的英语解释一下New_Col背后的逻辑吗?我很好奇,因为第 5 行似乎将 Non_Exc 作为新的 col 值,而您的 max(lag) 不会在第 5 行遇到 Non_Exc 的滞后值。
标签: sql-server tsql amazon-redshift window-functions