【发布时间】:2018-01-03 13:58:23
【问题描述】:
我有一个包含 3 列的配置单元表 hive_tab:
+---------------------+
| date |id | desc |
+---------------------+
|2017-05-31|100| high |
|2017-05-30|202| high |
|2017-05-31|102|medium|
|2017-05-31|102|medium|
|2017-05-31|102| low |
|2017-05-31|101| low |
|2017-05-30|201|medium|
|2017-05-31|100| high |
|2017-05-31|100| low |
|2017-05-31|100| high |
|2017-05-30|200| low |
|2017-05-30|201|medium|
|2017-05-30|201|medium|
|2017-05-30|202| high |
|2017-05-30|201| high |
|2017-05-30|201| low |
|2017-05-30|201| low |
|2017-05-30|202|medium|
+---------------------+
预期输出是:
+----------------------------------+
| date |id | desc | count_desc |
+----------------------------------+
|2017-05-31|100| high | 3 |
|2017-05-31|101| low | 1 |
|2017-05-31|102|medium| 2 |
|2017-05-30|200| low | 1 |
|2017-05-30|201|medium| 3 |
|2017-05-30|202| high | 2 |
+----------------------------------+
数据是: Perday(date) 可以有任意数量的 ID。每个 ID 将有任意数量的 desc,如 high、medium、low。
我们想要预期输出中提到的每个 id 每天出现频率最高的 desc。
已经尝试过以下查询:
select A.date,A.id,A.desc,max(c)
from(
select date,id,desc,count(desc) c
from hive_tab group by date,id,desc)A
group by id,c,date,desc;
但输出不如预期。它每天为每个 id 提供所有 desc,而不是每个 id 每天只提供最频繁出现的 desc。
任何建议都会有帮助。
谢谢
【问题讨论】: