0
我喜歡編寫一個sql查詢來計算每個用戶使用應用程序的天數和多少個併發日期。用戶可以進入應用程序,每天數次,但應該算作1sql - 查找用戶使用應用程序的天數
我的表看起來像這樣:
id | bigint
user_id | bigint
action_date | timestamp without time zone
我喜歡編寫一個sql查詢來計算每個用戶使用應用程序的天數和多少個併發日期。用戶可以進入應用程序,每天數次,但應該算作1sql - 查找用戶使用應用程序的天數
我的表看起來像這樣:
id | bigint
user_id | bigint
action_date | timestamp without time zone
一種方式做到這一點
SELECT user_id, COUNT(*) days_total, SUM(conseq) days_consecutive
FROM
(
SELECT user_id,
CASE WHEN LEAD(date, 1) OVER (PARTITION BY user_id ORDER BY date) - date = 1 THEN 1 ELSE 0 END consecutive
FROM
(
SELECT user_id, action_date::date date
FROM table1
GROUP BY user_id, action_date::date
) q
) p
GROUP BY user_id
這裏是一個SQLFiddle演示
要計算每個用戶的天數:
SELECT user_id, count(DISTINCT action_date::date) AS days
FROM user_action_tbl
GROUP BY user_id;
我不完全確定如何解釋「併發」日子。你的意思是「連續」嗎?或者,也許每天有多少用戶「同時」? –
目前還不清楚您是否希望這是連續操作的最長髮生次數,或者是每次連續使用應用程序時計數的簡單計數器。 –