一尘不染

MySQL累积和按日期分组

mysql

我知道有一些与此相关的帖子,但是我的情况有些不同,因此我希望获得一些帮助。

我需要从数据库中提取一些数据,这些数据是每天交互的累积计数。目前这就是我所拥有的

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), MONTH(e.Date) 将其按月和月中的天进行拆分,但计数再次关闭。

我根本不是MySQL专家,所以我对丢失的内容感到困惑


阅读 445

收藏
2020-05-17

共1个答案

一尘不染

新答案

起初,我不明白您要尝试进行总运行。外观如下:

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);
2020-05-17