2013-08-28 19 views
0

我有一個MySQL數據庫在那裏我存儲門禁......我掙扎找出如何讓每個鍵每天實例計數......MySQL的 - 獲取每天數爲唯一鍵

樣本數據:

id |  timestamp  | key 
----------------------------------- 
    0 | 2013-06-09 14:58:07 | 001 
    1 | 2013-06-11 07:21:13 | 001 
    2 | 2013-06-11 10:05:11 | 001 
    3 | 2013-06-12 07:13:59 | 002 
    4 | 2013-06-12 10:05:01 | 002 
    5 | 2013-06-12 14:31:01 | 001 
    6 | 2013-06-13 11:28:14 | 001 
    7 | 2013-06-13 07:00:28 | 002 
    8 | 2013-06-14 14:05:13 | 002 
    9 | 2013-06-15 09:38:23 | 002 

什麼,我希望能與落得是:

key | 09 | 10 | 11 | 12 | 13 | 14 | 15 | ACCESSED DAYS | 
---------------------------------------|---------------- 
001 | 1 | 0 | 2 | 1 | 1 | 1 | 1 |    6 | 
002 | 0 | 0 | 0 | 2 | 1 | 0 | 0 |    2 | 

謝謝您的時間!

+1

你的列在樣本中代表什麼?他們約會? –

+0

我建議你返回一個簡單的有序數組,並在'表示層'/應用程序級代碼中處理表示(例如用一點PHP) – Strawberry

+0

這看起來不像MySQL可以自己做的事情(很容易)。 –

回答

0

你會有條件聚集做到這一點:

select `key`, 
     sum(day(timestamp = 9)) as `09`, 
     sum(day(timestamp = 10)) as `10`, 
     sum(day(timestamp = 11)) as `11`, 
     sum(day(timestamp = 12)) as `12`, 
     sum(day(timestamp = 13)) as `13`, 
     sum(day(timestamp = 14)) as `14`, 
     sum(day(timestamp = 15)) as `15`, 
     count(distinct date(timestamp)) as accessdays 
from t 
group by `key`; 

要得到的天數,僅計算了不同天。

+0

謝謝!奇蹟般有效;儘管如此,我還有一個問題......因爲我試圖找出密鑰被使用了多少次,所以這些日子不應該算作一次計數。 – Kate

+0

@Kate。 。 。 'sum()'*是*做一個計數。每當條件成立時,它就會加上「1」。 –

0

這裏是我的思維過程

首先,讓我們選擇所有天爲一鍵

SELECT DISTINCT DAY(timestamp) FROM sample_data WHERE key = ? 

其次,讓我們計算的列數從以前的結果

SELECT COUNT(*) as access_days FROM (SELECT DISTINCT DAY(timestamp) from sample_data WHERE key = ?) a 

最後,讓我們把它與GROUP BY混合得到每個單獨的密鑰的結果

SELECT 
    b.key as key, 
    (SELECT COUNT(*) FROM (SELECT DISTINCT DAY(timestamp) 
    FROM sample_data a WHERE a.key = b.key)) access_days 
FROM sample_data b 
GROUP BY b.key