用于时间序列数据的SQL top N系列

时间:2016-10-18 20:22:04

标签: sql hive apache-spark-sql hiveql impala

我正在尝试构建一个sql查询,它将为我提供前N系列。为了简化,我们可以说前N代表第一天的最大数量()(或整个系列的数量()将更好)。

例如: 我有X列,但只有两个我将聚合在一起:" color"和"日期"。 "颜色"列有多个100个变体,但我只想要前10个。对于10"颜色中的每一个"我希望得到所有日期的计数(*)

如果没有排名,我的查询将如下所示:

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

如果我通过+限制"它只会选择顶部片段,但不会选择顶级片段。

有什么想法吗?

感谢

PS;如果这改变了我正在使用的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系列",即使蓝色是第3天最大的,我也只想选择黑色和红色,因为它们是最大的"整体& #34 ;.蓝色应该完全过滤掉结果

期望的输出

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

1 个答案:

答案 0 :(得分:1)

这可以通过cte和window function来实现。

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

注意:使用表名更新表。