2017-10-12 82 views
0

我正在嘗試獲取不刪除或更新記錄的表中的活動用戶數,而是將它添加到表中並假定最後一項是最有效的。但是,對於歷史數量,我需要每天的活動次數。如何選擇給定日期的最後一個條目

具有下列數據:

-------------------------------------- 
id | user_id | type | date 
-------------------------------------- 
1 sam  New  2017-10-10 
2 john  New  2017-10-12 
3 sam  Change 2017-10-14 
4 sam  Cancel 2017-10-15 

我需要能夠來算,很多「活動」用戶我怎麼過的日期。

--------------------- 
Date  | Active 
--------------------- 
... 
2017-10-08 0  <-- Prior there were none 
2017-10-09 0 
2017-10-10 1 
2017-10-11 1  <-- Fill-in dates 
2017-10-12 2  <-- Cumulative adding 
2017-10-13 2 
2017-10-14 2  <-- A change is irrelevant 
2017-10-15 1  <-- A Cancel should decrease the count 

我有一個calendar_table並嘗試了各種建議,但似乎無法得到它的權利:如我所期望得到的東西。

+0

請參閱https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a -very-simple-sql-query – Strawberry

+0

給我們一個出發點。告訴我們你試過的東西。 –

回答

0
SELECT date, COUNT(DISTINCT user_id) AS active FROM data GROUP BY date; 

這就是你想要達到的目標嗎?聽起來很簡單,但也許我誤解你的問題......

UPDATE

此外,我想你需要一個單獨的表「日期」包含所有日期。就像這樣:

--------------------- 
Date  
--------------------- 
... 
2017-10-08 
2017-10-09 
2017-10-10 
2017-10-11  
2017-10-12 
2017-10-13 
2017-10-14 
2017-10-15 

然後,你需要進行左/右JOIN來,你與我的回答上方的SQL查詢得到的結果。

SELECT dates.date, COALESCE(result.active, 0) 
FROM dates 
LEFT JOIN (
    SELECT date, COUNT(DISTINCT user_id) AS active 
    FROM data 
    GROUP BY date 
) AS result ON dates.date = result.date 

而結果可能是這樣的:

--------------------- 
Date  | Active 
--------------------- 
... 
2017-10-08 0 
2017-10-09 0 
2017-10-10 1 
2017-10-11 1 
2017-10-12 2 
2017-10-13 2 
2017-10-14 2 
2017-10-15 1 

COALESCE取代null的與0

我與我的電話接聽,所以我沒有檢查我的查詢的有效性。但你有我的想法

+0

你沒有考慮到一個用戶可能有超過1個條目的事實,所以你需要做一個max()或其他東西 – smorhaim

+0

它不會有。它按日期分組 –

+0

無論如何,我還沒有檢查它 –

相關問題