我正在尝试构建一个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
答案 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
注意:使用表名更新表。