2013-12-14 176 views
0

我希望能夠SELECT COUNT(每個日期不同的值,然後把他們疊加在一起這是我的主計數代碼:SELECT COUNT(DISTINCT ..)

SELECT *, 
     COUNT(track.ip) AS tracker 
FROM user, 
     track 
WHERE track.user = $user 
GROUP BY $user 
ORDER BY tracker 
LIMIT 1 

我的數據庫名是datein和它輸入的INSERT完成的日期和時間的方式下面是代碼:

 Database column : datein 

     Database insert looks like : 2013-11-8 11:17:23 

我相信它應該類似於此代碼的東西:

SELECT *, 
     COUNT(DISTINCT track.user) AS tracker 
FROM user, 
     track 
WHERE track.user = $user 
     AND track.datein >= NOW() - INTERVAL BEGINNING DAY 
GROUP BY $user 
ORDER BY tracker 
LIMIT 1 

它應該看起來類似於上面的代碼,但應該有一種方法來選擇它。我怎樣才能每個日期選擇COUNT DISTINCT值?

+3

您可以提供樣本數據和期望的結果嗎? –

+0

我可以計算清楚,但我不能...計數日期間隔... – user3102920

+0

從NOW和我的數據庫的開始會有什麼間隔。 – user3102920

回答

0

它看起來像你想包含兩列的結果集:不同用戶的數量,日期。我無法弄清楚你的FROM條款,所以我會跳過那部分。

讓我們從包含用戶和日期的結果集開始。

SELECT DISTINCT user, 
       TO_DATE(DATE_FORMAT(track.datein, '%Y-%m-%d')) datein 
    FROM whatever 
WHERE whatever 
    AND whatever 

將日期時間值壓縮到簡單日期,併爲我們提供了具有不同行的用戶/日期結果集。

接下來,我們總結一下。

SELECT count(*) AS tracker 
     datein 
    FROM (
    SELECT DISTINCT user, 
        TO_DATE(DATE_FORMAT(track.datein, '%Y-%m-%d')) datein 
     FROM whatever 
    WHERE whatever 
     AND whatever 
) AS a 
    GROUP BY datein 

這應該給你你需要的結果集。

0

從你的意見,我想你需要使用MIN函數的HAVING子句的組合在databasemif這個你願意,你可以這樣做的最早日期的datein比較

SELECT *, 
     COUNT(DISTINCT track.user) AS tracker 
FROM user, 
     track 
GROUP BY $user 
HAVING track.user = $user 
     AND track.datein >= MIN(datein) 
ORDER BY tracker 
LIMIT 1