2017-10-05 87 views
1

假设有一些数据的表格和与日期的柱:分区通过在蜂房

column1, column2, date 
a, a, 2016 
a, b, 2016 
a, c, 2017 
b, d, 2017 
b, e, 2017 

的情况是进行计数的每个列1列2 OCCURENCES并应用分钟日期为每个列1。

第一部分是一个简单的小组。第二个可以通过分区划分条款获得。但是,我怎样才能以聪明而干净的方式将这两者结合? 真的需要分区才能获得最短日期吗?任何明智的建议都会很棒!

预期输出:

column1, count, min_date 
a, 3, 2016 
b, 2, 2017 
+0

添加预期的输出 –

+0

@ bry888也添加您的代码 –

+0

我没有代码,这是一个关于编写代码的问题:)关于格式化。 – bry888

回答

0

简单group by

select column1, 
     count(distinct column2) count, --remove distinct if you need count not null column2 by column1 
             --use count(*) if you need count all rows by column1 
     min(date)    min_date 
from table 
group by column1 

测试一下:

select column1, 
     count(distinct column2) count, --remove distinct if you need count not null column2 by column1 
             --use count(*) if you need count all rows by column1 
     min(date)    min_date 
from (
select 
stack(6, 
'a','a', 2016, 
'a','b', 2016, 
'a','c', 2017, 
'b','d', 2017, 
'b','e', 2017, 
'c','e', 2015) as(column1, column2, date) 
) s 
group by column1 

结果:

a 3 2016  
b 2 2017  
c 1 2015  

请注意,min_date为每个column1值选择了最小值。

+0

此解决方案不给出每个column1的最短日期,但是整个列的最短日期为 – bry888

+0

@ bry888是的,它会给出每个'column1'值的最短日期,并非绝对最小值,因为有'by group by' – leftjoin

+0

@ bry888只有当您需要通过一个查询中的不同组进行聚合时,才需要分析函数(使用分区) – leftjoin