SELECT COUNT(DISTINCT ..)

时间:2013-12-14 20:16:49

标签: mysql sql

我希望能够SELECT COUNT(每个DATE的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值?

2 个答案:

答案 0 :(得分:0)

从您的评论中我想您需要比较数据库中最早的日期中的日期,如果您希望这样做,可以使用MIN函数与HAVING子句的组合

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 

答案 1 :(得分: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

那应该会给你你需要的结果集。