【问题标题】:Group by fields in HIVE to get all columns using Hive按 HIVE 中的字段分组以使用 Hive 获取所有列
【发布时间】:2017-06-10 14:09:03
【问题描述】:

我有以下数据集。我想根据特定列上的分组依据(或其他一些函数)获取某些列值。 我的数据集如下所示:

id  zip  Action  content  duration  OS    TIME
================================================
1  11    START   DELL               LINUX   12
1  11    JUMP    HP                 UNIX    14
1  11    STOP    HP       10        LINUX   16
1  11    START   WIN               LINUX    2
1  11    JUMP    HP                 UNIX    4
1  11    STOP    SONY     12        LINUX   15
2  12    START   HP                 UNIX    3
2  12    STOP    FOP      2         WINDOWS 10
--------------------------------------------

我想获取基于相同 (id,zip) 组的所有列值,其中 Action='STOP' 和过滤记录的最大时间。 我的预期输出是:

id  zip  Action  content  duration  OS
========================================
1  11    STOP    HP       10        LINUX

2  12    STOP    FOP      2         WINDOWS
--------------------------------------------

如何使用 HIVE 达到同样的效果? 请帮忙。

【问题讨论】:

  • 提示:WHERE 就足够了。
  • 我已经编辑了我的问题。对不起,

标签: sql hive hiveql


【解决方案1】:

行号

select  id,zip,Action,content,duration,OS

from   (select  *
               ,row_number() over
                (
                    partition by    id,zip
                    order by        time desc
                )   as rn

        from    mytable

        where   action = 'STOP'
        ) t

where   rn = 1

+----+-----+--------+---------+----------+---------+
| id | zip | action | content | duration |   os    |
+----+-----+--------+---------+----------+---------+
|  1 |  11 | STOP   | HP      |       10 | LINUX   |
|  2 |  12 | STOP   | FOP     |        2 | WINDOWS |
+----+-----+--------+---------+----------+---------+

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多