我的配置单元表中有数据集,如下所示
date col1 col2 col3
2016-02-01 A X 5
2016-02-03 A X 5
2016-02-04 A X 5
2016-03-01 A X 6
2016-04-01 A X 5
2016-04-02 A Y 5
2016-04-03 A Y 5
我必须对 col 1 和 col2 进行选择性分组,只要 col3 值发生变化,就会形成一个组,例如 row4 中 col3 值从 5 更改为 6,我必须获取日期列并获取最小值和最小值其中的最大值。 输出应该是这样的。
col1 col2 col3 minDate maxDate
A X 5 2016-02-01 2016-02-04
A X 6 2016-03-01 2016-03-01
A X 5 2016-04-01 2016-04-01
A Y 5 2016-04-02 2016-04-03
我确信对 col1 和 col2 进行简单的分组是行不通的。 任何人都可以建议一种方法来实现这一目标吗?
最佳答案
select col1,col2,col3
,min(date) as minDate
,max(date) as maxDate
from (select *
,row_number () over
(
partition by col1,col2
order by date
) as rn_part_1_2
,row_number () over
(
partition by col1,col2,col3
order by date
) as rn_part_1_2_3
from mytable
) t
group by col1,col2,col3
,rn_part_1_2 - rn_part_1_2_3
order by col1,col2
,minDate
;
+------+------+------+------------+------------+
| col1 | col2 | col3 | mindate | maxdate |
+------+------+------+------------+------------+
| A | X | 5 | 2016-02-01 | 2016-02-04 |
| A | X | 6 | 2016-03-01 | 2016-03-01 |
| A | X | 5 | 2016-04-01 | 2016-04-01 |
| A | Y | 5 | 2016-04-02 | 2016-04-03 |
+------+------+------+------------+------------+
关于sql - hive 中的复杂查询分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43059686/