0

分我有如下表PostgreSQL的 - 數據由月

enter image description hereenter image description here

我收到每月USER_ID其中註冊日期和註冊日期應該是不同的計數。例如: enter image description here

不過,我需要接受唯一用戶數像下面的例子:

enter image description here

其中黃色細胞是每月登記計數。其他數據是unique_user,在接下來的幾個月內與註冊不同。

例如USER_ID 104製成年03月登記和曾在三月,四月和五月登錄。我需要看到後三月登錄和除以月

作爲一個結論,我需要看到,有登記後一個月的月登錄所有的唯一用戶。

registration table  
User_ID month registration_date 
101 dec 12.12.2016 
102 dec 1.12.2016 
103 feb 2.2.2017 
104 mar 14.3.2017 
105 mar 14.3.2017 
106 apr 5.4.2017 
107 may 15.5.2017 
108 may 17.5.2017 
109 may 18.5.2017 

login table  
user_id month login_date 
101 dec 12.12.2016 
101 jan 1.1.2107 
103 apr 1.4.2017 
101 may 1.5.2017 
104 mar 14.3.2017 
104 mar 15.3.2017 
104 apr 1.4.2017 
104 may 5.5.2017 
105 may 15.5.2017 
+0

請閱讀http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557和接受的答案 –

+0

我讀了它,但是這是唯一的數據,例如......我做到了在Excel中明確解釋 –

回答

1

如果我理解你的權利,你需要寫類似下面來得到你需要的:

SELECT COUNT(*) cnt, reg.month reg_month, reg.month log_month 
FROM (
    SELECT DISTINCT ON (user_id, month) month 
    FROM registration_table 
) reg 
GROUP BY reg.month 
UNION ALL 
SELECT COUNT(*) cnt, reg_month, log_month 
FROM (
    SELECT reg.month reg_month, log.month log_month FROM (
    SELECT DISTINCT ON (user_id, month) user_id, month 
    FROM registration_table 
) reg 
    JOIN (
    SELECT DISTINCT ON (user_id, month) user_id, month 
    FROM login_table 
) log ON log.user_id = reg.user_id AND log.month != reg.month 
) sub 
GROUP BY reg_month, log_month 
  1. 首先應填寫表格與0值每個單元格,因爲該查詢不會遍歷每個月。
  2. 然後,只需執行查詢,並針對每個小區(reg_month,log_month)填充對應cnt值。

我爲您創建了以下sqlfiddle example。它用你的輸入/輸出例子填滿表格。

只是幾個音符。

  • 你的表中的數據應該是有效的。例如。沒有註冊用戶的登錄數據。
  • 不包括年處理。
+0

感謝的人,你的劇本是非常有用的,我變了,但邏輯是偉大的!再次感謝! –

+0

@DejanIvanov很樂意幫助你。 – DjezzzL