2017-02-19 18 views
1

NUM鑑於見下表獲取最大post_year組通過電子郵件與多年

Email Post_Year country 
====== ========== ======= 
[email protected] 2006  US 
[email protected] 2007  US 
[email protected] 2008  HK1 
[email protected] 2008  HK 
[email protected] 2009  CN 
[email protected] 2010  SW 

我要通過電子郵件將有

  1. 所有最大Post_year組列,如果有多個最大Post_year ,只需選擇一個

  2. 以及該特定電子郵件的max(post_year)-min(post_year)的num_of_yrs。

Email Post_Year country Num_Of_Yrs 
====== ========== ======= ============= 
[email protected] 2008  HK  2 [which is 2008-2006] 
[email protected] 2010  SW  1 [which is 2010-2009] 

如何達到目的?

回答

0

編輯:有了您編輯的意圖,你可以簡單地使用:

SELECT 
    email, 
    MAX(post_year) post_year, 
    MAX(country) country, 
    MAX(post_year) - MIN(post_year) num_of_yrs 
FROM 
    table_name 
GROUP BY 
    email; 

您可以使用此:

WITH tmp AS 
(
    SELECT 
     email, 
     MAX(post_year) max_post_year, 
     MIN(post_year) min_post_year 
    FROM 
     table_name 
    GROUP BY 
     email 
) 
SELECT 
    t.email, 
    t.post_year, 
    t.country, 
    tmp.max_post_year - tmp.min_post_year num_of_yrs 
FROM 
    table_name t 
INNER JOIN 
    tmp 
ON t.email = tmp.email 
    AND t.post_year = tmp.max_post_year; 
+0

感謝,但有多個最大值後一年的可能性,在這種情況下,我會選擇一個隨機的,我已經修改了問題,以反映這一點,我們應該怎樣做這個案例? – sweetyBaby

+0

@sweetyBaby有多個max post_year,你想在你的結果集中選擇哪個國家? –

+0

隨機選擇一個 – sweetyBaby

0

您可以使用窗口函數ROW_NUMBER得到一個排,每封郵件最多一年和窗口函數的最大值和最小值來獲得每個電子郵件的最大差異。

試試這個:

select * 
from (
    select t.*, 
     row_number() over (partition by email 
          order by post_year desc) rn, 
     max(post_year) over (partition by email) - 
     min(post_year) over (partition by email) num_of_yrs 
    from your_table t 
    ) t where rn = 1; 
相關問題