我嘗試從包含日誌記錄信息的表中生成一些用戶統計信息。Postgres遞歸CTE或交叉表函數
**TABLE users**
user_id | user_name
-------------------
1 | julia
2 | bob
3 | sebastian
**TABLE logs**
user_id | action | timepoint
------------------------------------
1 | create_quote | 2015-01-01
1 | send_quote | 2015-02-03
1 | create_quote | 2015-02-02
1 | start_job | 2015-01-15
2 | start_job | 2015-02-23
2 | send_quote | 2015-03-04
2 | start_job | 2014-12-02
我的期望輸出如下表
user_id | username | create_quote | send_quote | start_job
-----------------------------------------------------------
1 | julia |2 | 1 | 1
2 | bob |0 | 1 | 1
3 | sebastian |0 | 0 | 0
它包括所有用戶(即使沒有任何記錄),但只有日期「2015年1月1日」的行動和「2015年-05-31' 。操作按操作類型和用戶進行計數/分組。
的SQL語句可能看起來像
SELECT * FROM myfunction() WHERE to_char(timepoint, 'YY/MM') BETWEEN '15/01' AND '15/05';
成才,你有什麼想法如何管理呢?我一直在嘗試使用CTE和遞歸以及交叉表功能,但找不到任何解決方案。
你只有這三個動作? create_quote,send_quote和start_job? –
@a_horse_with_no_name現在我只有這三個動作。但未來可能會有不同的 – Sebastian
看起來你一直在試圖對我的答案進行編輯......如果你有評論或問題,只需將其添加到我的回覆下面或編輯你的問題來澄清。我發現你在我的代碼中發現了一個錯誤,現在已經糾正了,是的 - 我不喜歡這個函數的想法,但是我做到了,因爲我認爲你的文章暗示你想要一個函數(儘管我承認我不確定)。請參閱修訂... – Hambone