2012-11-27 10 views
1

我有一個包含一個Web應用程序,當人們登錄我的表中的一個例子,其跟蹤的記錄表進行首次的日數爲:取得每個登錄

| user_id | date_time  | 
+---------+------------------+ 
| 0033 | 2012-11-22 10:33 | <- first login of 0033 on 2012-11-22 
| 0034 | 2012-11-22 10:38 | <- first login of 0034 on 2012-11-22 
| 0052 | 2012-11-22 10:43 | <- first login of 0052 on 2012-11-22 
| 0052 | 2012-11-23 09:23 | 
| 0066 | 2012-11-23 15:58 | <- first login of 0066 on 2012-11-23 
| 0033 | 2012-11-23 16:14 | 

我最想要的東西是表的人們,記錄在首次上每個日期的量,即:

| count | date  | 
+-------+------------+ 
|  3 | 2012-11-22 | <- there were 3 users that logged in for the first time on 2012-11-22 
|  1 | 2012-11-23 | 

我知道我只能拿到日期,通過做

SELECT DATE(`date_time`) AS `date` 
FROM `logging` 
GROUP BY `date` 
ORDER BY `date` ASC 

我想在一個查詢中獲得第二個表,我知道這是可能的,我只是不知道如何。在此先感謝

回答

1

您可以使用一個不相關的子查詢用戶獲得第一次登錄的日期爲每個用戶,然後將這些日期分組在一起,以獲得每天第一次登錄的次數。

SELECT dd, COUNT(*) 
FROM (SELECT MIN(DATE(`date_time`)) AS dd 
    FROM `logging` 
    GROUP BY `user_id`) a 
GROUP BY dd 
ORDER BY dd; 

Demo

+0

SQLfiddle +1,這也非常好,非常感謝! –

-1

我認爲你需要這樣的:

SELECT count(1) , 
     DATE(`date_time`) 
from my_table 
group by DATE(`date_time`) 

如果你需要它已經記錄在一天明智

Select 

user_id, `date_time` from my_table group by DATE(`date_time`), user_id 
+0

這顯示了這一天所有的登錄,不只是第一有人登錄 –

+0

嘗試第二次查詢,它將導致用戶在當天第一次登錄 –

1

計數登錄每天,對於已經沒有以前的登錄記錄user_ids數量:

select DATE(`date_time`) as `date`, 
     count(user_id) 
from `logging` l1 
where user_id not in (
     select user_id from `logging` l2 where l1.user_id = l2.user_id and l2.date_time < l1.date_time) 
group by DATE(`date_time`) 
+0

您的子查詢將執行相當嚴重的知道,將有更多的登錄比用戶多。 –

+0

這也適用,但正如@Jack所說,大型原木需要很長時間。不管怎麼說,還是要謝謝你! –