我希望能够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值?
答案 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
那应该会给你你需要的结果集。