gpt4 book ai didi

MySQL累计总和按日期分组

转载 作者:IT老高 更新时间:2023-10-29 00:14:27 24 4
gpt4 key购买 nike

我知道有一些帖子与此相关,但我的情况有点不同,我想就此获得一些帮助。

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

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;

这个输出接近我想要的,但不完全是我需要的。

我遇到的问题是日期与交互发生的小时、分钟和秒一起存储,因此分组依据不会将日期分组在一起。

这是输出的样子。

enter image description here

在 12-23 日,有 5 个交互,但由于时间戳不同,因此未分组。所以我需要找到一种方法来忽略时间戳,只看当天。

如果我尝试 GROUP BY DAY(e.Date) 它只按天对数据进行分组(即任何一个月 1 号发生的所有事情都被分组到一行中)并且输出是根本不是我想要的。

enter image description here

GROUP BY DAY(e.Date), MONTH(e.Date) 按月和月中的日期拆分它,但计数再次关闭。

enter image description here

我根本不是 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 对某些行有多个匹配项,这会增加您的计数。无论是那个还是你的连接中的比较也是比较秒,这不是你所期望的。

无论如何,不​​要将日期时间字段分割成天和月,只需从中去掉时间即可。以下是你的做法。

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);

关于MySQL累计总和按日期分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22276790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com