2009-11-23 49 views
0

我有一個名爲activity 2列的表:幫助上一個SQL查詢

when as datetime // last time i saw a user 
guid as varchar // a unique identifier for each user 

這個表是用來在一定的資源來跟蹤使用情況。 Guid由客戶創建。

我希望能夠查詢最近一天/每週/每月有多少新用戶。 新用戶由第一次出現在活動表中的​​標識。

如何在單個SQL語句中執行此操作?

更新: 該表包含每次用戶使用該資源時的條目。所以如果他用了5次,就會有5排。 直到用戶使用該資源,我沒有他的指導,他沒有表中的條目。

結果

謝謝大家,它幫助了很多。對於任何感興趣的人來說,這是我從你所有的建議中編譯的內容:

SET @duration=7; 
SELECT COUNT(distinct guid) AS total_new_users FROM `activity` 
    WHERE `when` >= DATE_SUB(CURDATE(),INTERVAL @duration DAY) AND guid NOT IN 
    (
     SELECT guid 
     FROM `activity` 
     WHERE `when` < DATE_SUB(CURDATE(),INTERVAL @duration DAY) 
    ); 
+0

您希望在上週內新註冊的用戶數或上週內所有用戶的數量。 – 2009-11-23 21:48:26

+0

@Mark:只有新用戶。 – Amirshk 2009-11-23 21:50:51

回答

4
select count(guid)as total_new_users 
from activity 
where when >= {last day/week/month} 
and guid not in(select guid 
from activity 
where when < {last day/week/month}) 
0

需要分類。如果在創建時沒有填充,那麼只有SELECT * FROM activity WHERE的時候IS爲null。但我不確定這是否是你的意思。

+0

@flex:我更新了,希望現在更清楚 – Amirshk 2009-11-23 21:52:08

1
SELECT COUNT(DISTINCT guid) 
FROM activity 
WHERE guid NOT IN (
    SELECT DISTINCT guid FROM activity WHERE when < CURDATE() - INTERVAL 7 DAYS 
) 
AND when BETWEEN CURDATE() AND CURDATE() - INTERVAL 7 DAYS; 

改變了7天,以多久。

+1

這不僅會計算*新用戶,我認爲... – fretje 2009-11-23 21:50:09

+0

我認爲@curtisk有正確的答案。 – fretje 2009-11-23 21:53:14

+0

是。那就對了。我正準備發佈。 – theShingles 2009-11-23 21:54:16

0
SELECT COUNT(DISTINCT guid) 
FROM ACTIVITY 
WHERE when BETWEEN CURDATE() AND CURDATE() - INTERVAL 7 DAYS 
    AND guid NOT IN (SELECT distinct GUID FROM ACTIVITY WHERE when < (CURDATE() -7 DAYS)) 

應該這樣做。

2

我想你想要的是:

select count(*) from (
    select guid,min(when) as first from activity group by guid 
    having first between curdate()-interval 7 day and curdate()) 

你要查詢整個表,否則人們將算作新的過程中所涉及的時間段他們的第一次訪問。這個查詢找到每個GUID第一次被看到,然後過濾掉那些不在這個時間段內的GUID。

+0

@Jim:有趣的做法!添加表雖然 – curtisk 2009-11-23 21:58:35

+0

我認爲我的MySQL太舊了,它不能使用'DAYS'關鍵字。 (版本4.1.22)。 – Amirshk 2009-11-23 22:11:45

+0

@Jim:我喜歡HAVING這個用法。對於+1,請更正語法,將表添加爲curtisk詢問(「FROM activity」)並將INTERVAL單位(「7天」)單獨化。 – pilcrow 2009-11-23 22:25:28