Impala SQL:合并具有重叠日期的行.不支持WHERE EXISTS和递归CTE
时间: 2024-04-11 13:27:14 浏览: 128
sql合并相同行
5星 · 资源好评率100%
对于合并具有重叠日期的行,您可以使用窗口函数和子查询来实现。以下是一个示例查询,演示如何合并具有重叠日期的行:
```sql
WITH merged_rows AS (
SELECT
id,
start_date,
end_date,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY start_date) AS rn
FROM your_table
)
SELECT
mr1.id,
mr1.start_date,
COALESCE(mr2.end_date, mr1.end_date) AS end_date
FROM merged_rows mr1
LEFT JOIN merged_rows mr2
ON mr1.id = mr2.id
AND mr1.rn = mr2.rn - 1
AND mr1.start_date <= mr2.end_date
WHERE mr2.id IS NULL;
```
在这个查询中,我们首先使用窗口函数给每个id按照start_date进行排序,并为每一行分配一个行号(rn)。然后,我们将这个结果与自身进行自连接,通过比较start_date和end_date来确定是否存在重叠的日期。最后,我们选择没有重叠的日期或最后一个重叠日期的行,使用COALESCE函数将end_date设置为最后一个非空的end_date。
请注意,Impala SQL不支持WHERE EXISTS和递归CTE,因此我们采用了这种基于窗口函数和子查询的方法来解决该问题。
阅读全文