2014-12-25 38 views
0

我喜歡編寫一個sql查詢來計算每個用戶使用應用程序的天數和多少個併發日期。用戶可以進入應用程序,每天數次,但應該算作1sql - 查找用戶使用應用程序的天數

我的表看起來像這樣:

id   | bigint 
user_id  | bigint   
action_date | timestamp without time zone 
+1

我不完全確定如何解釋「併發」日子。你的意思是「連續」嗎?或者,也許每天有多少用戶「同時」? –

+0

目前還不清楚您是否希望這是連續操作的最長髮生次數,或者是每次連續使用應用程序時計數的簡單計數器。 –

回答

0

一種方式做到這一點

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演示

1

要計算每個用戶的天數:

SELECT user_id, count(DISTINCT action_date::date) AS days 
FROM user_action_tbl 
GROUP BY user_id;