前言:我是MySQL的新手。
我的目标是生成一个显示三列的表:user_id
,事件发生的天数(称为eventDays
(,以及自第一个事件以来的天数(称为totalDays
(。
通过生成此表,我将能够生成一个比率,显示有多少eventDays:totalDays
(这将在 Excel 中完成(。
下面是我的查询。它不会产生错误,但输出是错误的:当user_id
按预期重新调整时,eventDays
始终返回值"1",totalDays
为每个给定user_id
返回值"0"。
提前感谢您,再次: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;
当没有您要查询的数据示例时,很难在这方面为您提供帮助。 如果你能回来,我可能会提供更多帮助。 无论如何,请参阅下文:
"。。。事件发生的天数(称为此事件天数( . . .">
-- 我相信你误用了 day(( 函数。 day(( 将返回 u 和 1 到 31 之间的整数作为月中的某一天。似乎查询中生成的标志字段的出现次数((或sum((会给出您想要的。
"。。。以及自第一个事件以来的天数(称为总天数(。">
-- 这个很难说,因为你正确地使用了这个函数。 第一个想法是也许一个日期比另一个日期小,它不计算负值或绝对值? 我不记得了,MySQL不是我的常规RDBMS。