首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择COUNT(DISTINCT ..)

选择COUNT(DISTINCT ..)
EN

Stack Overflow用户
提问于 2013-12-14 20:16:49
回答 2查看 256关注 0票数 0

我希望能够选择COUNT(每个日期的不同值,然后将它们加在一起。这是我的主要计数代码:

代码语言:javascript
复制
SELECT *,
       COUNT(track.ip) AS tracker
FROM   user,
       track
WHERE  track.user = $user
GROUP  BY $user
ORDER  BY tracker
LIMIT  1 

我的数据库名是datein,以及它输入插入的日期和时间的方式。以下是代码:

代码语言:javascript
复制
      Database column :   datein

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

我认为它应该类似于下面的代码:

代码语言:javascript
复制
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 

它应该看起来类似于上面的代码,但是应该有一种方法来选择它。如何选择每个日期的计数不同值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-14 20:41:53

看起来您需要有两个列的结果集:不同用户的计数,日期。我不明白你的FROM条款,所以我跳过那部分。

让我们从包含用户和日期的结果集开始。

代码语言:javascript
复制
SELECT DISTINCT user, 
                TO_DATE(DATE_FORMAT(track.datein, '%Y-%m-%d')) datein
  FROM whatever
 WHERE whatever
   AND whatever

它将日期时间值压缩为简单日期,并为我们提供一个具有不同行的用户/日期结果集。

接下来,我们对其进行总结。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-12-14 20:32:00

从您的注释中,我猜您需要比较数据库中最老日期的datein,如果您希望这样做,可以使用MIN函数和HAVING子句的组合来进行比较。

代码语言:javascript
复制
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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20587784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档