MySQL查询不返回DISTINCT或TIMESTAMPDIFF

时间:2017-07-11 23:31:09

标签: mysql sql

前言:我是MySQL的新手。

我的目标是生成一个显示三列的表:user_id,事件发生的天数(调用此eventDays)以及自第一个事件以来的天数(称为此totalDays)。

通过生成此表,我将能够生成一个比率,显示有多少eventDays:totalDays(这将在Excel中完成)。

以下是我的查询。 它不会产生错误,但输出错误:user_id按预期重新调整时,eventDays始终会返回值' 1'并且totalDays返回值' 0'对于每个给定的user_id

提前谢谢你,再次:n00b警告......

SELECT t1.user_id, COUNT(DISTINCT YEAR(t1.time_stamp), MONTH(t1.time_stamp), DAY(t1.time_stamp)) AS 'Number of unique days where an Event occured', TIMESTAMPDIFF(DAY, t1.time_stamp, t2.time_stamp) AS 'Total days since First Event'
FROM (
    SELECT *
    FROM first.table
    GROUP BY user_id
    ORDER BY time_stamp ASC) AS t1
       INNER JOIN (
            SELECT *
            FROM second_table
            GROUP BY user_id
            ORDER BY time_stamp DESC) AS t2
          ON t1.user_id = t2.user_id
          GROUP BY t1.user_id
          ORDER BY COUNT(DISTINCT YEAR(t1.time_stamp),MONTH(t1.time_stamp), DAY(t1.time_stamp)) DESC;

1 个答案:

答案 0 :(得分:0)

当没有您要查询的数据示例时,很难为您提供帮助。如果你可以回来,我可能会有更多的帮助。无论如何,见下文:

&#34 ;. 。 。事件发生的天数(称为eventDays)。 。 。 "

- 我相信你在滥用day() function。 day()将返回1和31之间的整数。看起来像查询中生成的标志字段的出现次数或sum()会给你想要的东西。

&#34 ;. 。 。以及自第一次活动以来的天数(称为totalDays)。 。 。 "

- 因为你正确使用这个功能,所以很难说这个。首先想到的可能是一个日期小于另一个,它不计算负数或绝对值?我不记得,mysql不是我的常规rdbms。