时间序列数据的sql top n系列

dfuffjeb  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(326)

我正在尝试构建一个sql查询,它将为我提供前n个序列。为了简化,我们可以说,前n个表示第一天的最大count()(或者整个系列的count()会更好)。
例如:我有x个列,但只有两个要聚合的列:“color”和“date”。“颜色”栏有100种变体,但我只想要前10种。对于10种“颜色”中的每一种,我都要有所有日期的计数(*)
如果没有排名,我的查询将如下所示:

"select count(*), color, date from table group by color, date"

如果我输入“orderby+limit”,它只会选择最上面的部分,而不会选择最上面的系列。
你知道吗?
谢谢
聚苯乙烯;如果这改变了什么我用Hive/ Impala
ex输入:

color  | date 
red    | 2016-01-01
red    | 2016-01-01
red    | 2016-01-01
red    | 2016-01-01
black  | 2016-01-01
black  | 2016-01-01
black  | 2016-01-01
red    | 2016-01-02
red    | 2016-01-02
black  | 2016-01-02
black  | 2016-01-02
black  | 2016-01-02
blue   | 2016-01-03
blue   | 2016-01-03
blue   | 2016-01-03
blue   | 2016-01-03
black  | 2016-01-03
red    | 2016-01-03

在这种情况下,如果我只选择“前2个系列”,即使蓝色是第三天最大的,我只想选择黑色和红色,因为它们是最大的“整体”。蓝色应该被完全过滤掉
期望输出

color  | date       | count
red    | 2016-01-01 |   4
black  | 2016-01-01 |   3
red    | 2016-01-02 |   2
black  | 2016-01-02 |   3
red    | 2016-01-03 |   1
black  | 2016-01-03 |   1
5t7ly7z5

5t7ly7z51#

这可以通过使用cte和窗口功能来实现。

with temp as (
SELECT color ,date, COUNT(1) OVER (PARTITION BY color ,date ) as cont
from table)
select *  from temp order by cont

注意:用表名更新表。

相关问题