SQL 时间序列数据的前 N ​​个序列

SQL top N series for time-series data

我正在尝试构建一个 sql 查询,它将为我提供前 N 个系列。为简化起见,我们可以说前 N 意味着第一天的最大计数()(或者整个系列的计数()会更好)。

例如: 我有 X 列,但我要聚合的只有两列:"color" 和 "date"。 "color" 列有多个 100 个变体,但我只想要前 10 个。对于 10 个 "colors" 中的每一个,我想要所有日期的计数 (*)

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

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

如果我放一个 "order by + limit" 它只会 select 顶部片段,而不是顶部系列。

有什么想法吗?

谢谢

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

在这种情况下,如果我 select 只有 "top 2 series",即使第三天蓝色是最大的,我只想 select 黑色和红色,因为它们是最大的"overall"。蓝色应该被完全过滤掉结果

期望的输出

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

这可以使用 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

注意: 将 table 更新为 table 名称。