sql - hive 中的复杂查询分组

标签 sql group-by hive data-analysis bigdata

我的配置单元表中有数据集,如下所示

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/

相关文章:

android - SQL 查询查找两列中值的计数

sql - ORA-01791-区分并排序

hadoop - 无法在配置单元 server2 上模拟

mysql - 输出同一 SQL 表中不同列的不同行

python - 在 htsql 中自定义 csv 输出

sql - 带有 SQL 注入(inject)保护的简单查询比没有的要花费更长的时间

csv - 使用 pig 过滤 CSV 列

c# - LINQ JOIN + GROUP BY + SUM

r - 用每个组的前n行对数据框进行子集设置,并按变量排序

hadoop - hadoop集群中HCatalog/Hive建表不导入数据到/app/hive/warehouse文件夹