2010-04-05 61 views
1

新的唯一ID號的號碼,我有一個iPhone應用程序,在那裏,「家裏打電話」到我的服務器的每一個用戶使用它的時間。在我的服務器,我創建的每個時間的唯一ID(類似於序列號)在MySQL表中的行又名UDID的設備,IP地址和其他數據。需要找到一個MySQL表

ClientLog列: Time, UDID, etc, etc.

我想知道是在給定日期設備(新的UDID唯一)的數量。即在給定日期的表格中添加了多少個UDID,但沒有在該日期之前出現?說白了,這是我當天獲得的新用戶數量。

這是接近,我覺得,但我不是100%那裏,不知道這就是我想要的......

SELECT distinct UDID 
FROM ClientLog a 
WHERE NOT EXISTS (
    SELECT * 
    FROM ClientLog b 
    WHERE a.UDID = b.UDID AND b.Time <= '2010-04-05 00:00:00' 
) 

我想返回的行數是新的獨立用戶在給定日期之後,但我不確定。我想添加到聲明將其限制到日期範圍(也指定上限)。

+0

你是什麼意思「我不知道」是什麼意思?只是想知道爲什麼你不能交叉檢查你的結果。 – John 2010-04-05 21:47:05

回答

1

您的查詢似乎是正確的,並且可以像這樣添加範圍:

SELECT DISTINCT UDID FROM ClientLog a WHERE a.Time >= '2010-04-05 00:00:00' 
             AND a.Time < '2010-04-06 00:00:00' 

AND NOT EXISTS(SELECT * FROM ClientLog b WHERE a.UDID = b.UDID 
              AND b.Time < '2010-04-05 00:00:00'); 

UPDATE:想到的另一種方法是在下面的,但我認爲這是比較慢:

SELECT DISTINCT UDID FROM ClientLog a WHERE a.Time >= '2010-04-05 00:00:00' 
             AND a.Time < '2010-04-06 00:00:00' 
             AND a.UDID <> ALL 
(SELECT DISTINCT udid FROM ClientLog b where b.Time < '2010-04-05 00:00:00'); 

更新2:當然,如果你只是在一些感興趣的新的UDID,那麼這將是最好的解決辦法:

SELECT COUNT(DISTINCT UDID) FROM ClientLog WHERE Time < '2010-04-05 00:00:00'; 
SELECT COUNT(DISTINCT UDID) FROM ClientLog WHERE Time < '2010-04-06 00:00:00'; 

然後拿在你的代碼的差異(可能有辦法做到這一點在MySQL,但我不是一個MySQL專家)。

+0

好的,第一個解決了它。我驗證通過運行查詢每個日期,則合計的結果,總等於唯一UDID的數量在表的整體。謝謝! 更新2讓我感到非常愚蠢的。很明顯,但我沒有看到那一個。再次感謝。 :) – Nicholas 2010-04-05 22:20:24

+0

不客氣。 =)如果您對我的回答滿意,請不要忘記標記爲已接受。 – 2010-04-05 22:22:53

+0

糟糕,現在全部設置。再次感謝。 – Nicholas 2010-04-05 22:44:24