HIVE SQL将连续范围折叠成单行
Posted
技术标签:
【中文标题】HIVE SQL将连续范围折叠成单行【英文标题】:HIVE SQL Collapsing continuous ranges into single rows 【发布时间】:2018-05-10 20:26:08 【问题描述】:考虑表中的以下记录:
NAME ID RATE LOC DAY
ABCD 123 -5 NYC 2017-01-01
ABCD 123 -5 NYC 2017-01-02
ABCD 123 -6 SFO 2017-01-03
ABCD 123 -6 DEN 2017-01-04
ABCD 345 -4 ATL 2017-01-05
ABCD 345 -4 WAS 2017-01-06
ABCD 123 -7 CLT 2017-01-07
ABCD 123 -7 CLT 2017-01-08
我想要一个类似的输出:
NAME ID RATE LOC START DAY END DAY
ABCD 123 -5 NYC 2017-01-01 2017-01-02
ABCD 123 -6 SFO 2017-01-03 2017-01-03
ABCD 123 -6 DEN 2017-01-04 2017-01-04
ABCD 345 -4 ATL 2017-01-05 2017-01-05
ABCD 345 -4 WAS 2017-01-06 2017-01-06
ABCD 123 -7 CLT 2017-01-07 2017-01-08
如何在 SQL 或 HIVE 中执行此操作?我尝试使用 max over partition 和 row_number。它似乎不起作用。任何想法都非常感谢。
这是我试过的sql:
select *
from (
select name
,id
,min(day) over (partition by name
,id) as start_date
,max(day) over (partition by name
,id) as end_date
,row_number () over (partition by name
,id
order by day asc) as row1
from table
) a
where row1=1;
【问题讨论】:
【参考方案1】:这可以通过不同的行数方法来实现。要了解它的工作原理,请运行内部查询并查看结果。
select name,id,min(day),max(day)
from (select t.*,
row_number() over(order by day)
-row_number() over(partition by name,id order by day) as grp
from tbl t
) t
group by name,id,grp
【讨论】:
非常感谢!!!工作完美。除了这 3 列之外,我还有其他几列。如果我将它们添加到选择和分组中,结果会发生变化。你知道解决办法吗? 在发布答案后更改问题是不公平的。 没有冒犯/不尊重。只是想为问题添加额外的上下文。我是堆栈溢出的新手。不知道这里的规矩。很抱歉。 @AS0207 在发布答案后对问题进行编辑是可以的,前提是该编辑实际上并未将问题更改为答案不相关/脱离上下文的程度。此外,如果提供的答案解决了您的问题,您可以将其标记为已接受,这样您自己就会获得更多声誉,回答者和任何未来的读者都知道答案有效以上是关于HIVE SQL将连续范围折叠成单行的主要内容,如果未能解决你的问题,请参考以下文章