如何获取日期的最大计数和相应的 hour_id?
Posted
技术标签:
【中文标题】如何获取日期的最大计数和相应的 hour_id?【英文标题】:how to get the max count and respective hour_id for a date? 【发布时间】:2015-06-02 12:00:41 【问题描述】:以下是我尝试从中获取最大计数以及相应的 hour_id 和 id 值的源数据。日期应该只有一行,现在特定日期有多个值。
id hour_id count date
621f50772a36e7 23 14474 20141202
621f50157c2973 0 7190 20141203
621f5077582f54 7 5043 20141225
621f505247c107 11 5023 20141224
621f50251c8b33 10 4943 20141224
621f5076c9327b 18 4901 20150113
621f50044c300e 10 4868 20141212
621f500e10fa5d 12 4858 20141224
621f505242ec27 9 4843 20141224
621f505263bc56 14 4716 20141231
621f50774a456c 19 4712 20141206
621f5077414404 19 4674 20141123
621f5077362f46 19 4666 20141224
621f505246ea97 10 4662 20141225
621f50522c6bf5 13 4626 20141226
621f5076c87607 13 4586 20141231
621f5052297007 17 4574 20141224
我已经试过了:
select max(count) cc
,partition_date
,location_id
,hour_id
from
(
select
l.location_id
, substr(x.evt_timestamp,9,2) as hour_id
, count(1) as count
,partition_date
from prismeventdetails x
join l_cellsite_location l
on x.evt_location = l.location_id
where x.evt_type = '100'
group by l.location_id
,hour_id
,partition_date
order by cc desc limit 500
) c
group by partition_date,location_id,hour_id
但无法得到想要的结果。 为一个日期获取多行。因为我已将 hour_id 包含在 group by .我想要 hour_id 和 id 值,其中 count 是该 date 的最大值。需要帮助,我们将不胜感激。
【问题讨论】:
为什么这个标签是黑斑羚? 我正在使用 Impala sql 引擎 您使用的是哪个版本的 Impala? 我正在使用 Impala 1.2.1 。 我的回答能解决你的问题吗? 【参考方案1】:以下是 GROUPed 和 MAXed 表与原始表的连接,应该得到你想要的。
WITH maxed AS
(
SELECT max(count) AS max_count, date_
FROM tests.so_30595512
GROUP BY date_
)
SELECT maxed.date_, maxed.max_count, t2.hour, t2.id
FROM maxed
JOIN tests.so_30595512 AS t2
ON maxed.date_ = t2.date_
AND maxed.max_count = t2.count;
这是对您上面概述的表的查询,但同样的方法可以轻松转换为您在示例查询中使用的任何连接表。
【讨论】:
【参考方案2】:尝试将 MAX 移动到子查询中:
select counts cc
,partition_date
,location_id
,hour_id
from
(
select
l.location_id
, substr(x.evt_timestamp,9,2) as hour_id
, max(count(1)) as counts
,partition_date
from prismeventdetails x
join l_cellsite_location l
on x.evt_location = l.location_id
where x.evt_type = '100'
group by partition_date, location_id, hour_id
order by cc desc limit 500
)c
【讨论】:
请注意,这使得外部查询变得不必要(这是一件好事) 收到此错误:AnalysisException:聚合函数不能包含聚合参数:MAX(COUNT(1))【参考方案3】:try this one:
select [count] cc
,partition_date
,location_id
,hour_id
from
(
select
l.location_id
, substr(x.evt_timestamp,9,2) as hour_id
, count(1) as [count]
,partition_date
from prismeventdetails x
join l_cellsite_location l
on x.evt_location = l.location_id
where x.evt_type = '100'
group by l.location_id
,hour_id
,partition_date
,ROW_NUMBER() over (ORDER BY [count] DESC) AS Number
order by cc desc limit 500
) c
WHERE Number = 1
group by partition_date,location_id,hour_id
【讨论】:
我使用的 Impala 版本不支持窗口函数。以上是关于如何获取日期的最大计数和相应的 hour_id?的主要内容,如果未能解决你的问题,请参考以下文章