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