2013-12-14 219 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