我知道有一些与此相关的帖子,但是我的情况有些不同,因此我希望获得一些帮助。
我需要从数据库中提取一些数据,这些数据是每天交互的累积计数。目前这就是我所拥有的
SELECT e.Date AS e_date, count(e.ID) AS num_interactions FROM example AS e JOIN example e1 ON e1.Date <= e.Date GROUP BY e.Date;
这样的输出接近我想要的,但不完全是我所需要的。我遇到的问题是日期与发生互动的时分秒存储在一起,因此group by不能将天分组在一起。
这就是输出的样子。http://screencast.com/t/N1KFNFyil 12月23日有5次互动,但由于时间戳不同,因此未归类。所以我需要找到一种忽略时间戳的方法,而只看一天。
如果我尝试将GROUP BY DAY(e.Date)其仅按日期进行分组(即,每个月的1日发生的所有事件都分组为一行),并且输出结果根本不是我想要的http://screencast.com/t/HN6DH3GV63M
GROUP BY DAY(e.Date)
GROUP BY DAY(e.Date), MONTH(e.Date) 将其按月和月中的天进行拆分,但计数再次关闭。
GROUP BY DAY(e.Date), MONTH(e.Date)
我根本不是MySQL专家,所以我对丢失的内容感到困惑
新答案
起初,我不明白您要尝试进行总运行。外观如下:
SET @runningTotal = 0; SELECT e_date, num_interactions, @runningTotal := @runningTotal + totals.num_interactions AS runningTotal FROM (SELECT DATE(eDate) AS e_date, COUNT(*) AS num_interactions FROM example AS e GROUP BY DATE(e.Date)) totals ORDER BY e_date;
原始答案
由于您的加入,您可能会得到重复。也许e1某些行有多个匹配项,这使您的人数膨胀了。要么连接中的比较,要么还比较秒,这不是您期望的。
无论如何,不要将datetime字段分成几天和几个月,而只是从中剥离时间。这是您的操作方式。
SELECT DATE(e.Date) AS e_date, count(e.ID) AS num_interactions FROM example AS e JOIN example e1 ON DATE(e1.Date) <= DATE(e.Date) GROUP BY DATE(e.Date);