我知道有一些相关的帖子,但我的情况有点不同,我想得到一些帮助。
我需要从数据库中提取一些数据,这些数据是白天的累积交互计数。目前这就是我所拥有的
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 theres 5交互,但它没有分组,因为时间戳是不同的。所以我需要找到一种方法来忽略时间戳,只看一天。
如果我尝试GROUP BY DAY(e.Date)
它只按天分组数据(即任何月份1日发生的所有事情都被分成一行),输出结果不是我想要的{{3} }
GROUP BY DAY(e.Date), MONTH(e.Date)
按月和月份将其拆分,但计数结束了。
我根本不是MySQL专家所以我对我所缺少的东西感到困惑
答案 0 :(得分:16)
新答案
起初,我不明白你是在试图做一个总计。这是看起来的样子:
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);
答案 1 :(得分:11)
我弄清楚我昨晚需要做什么......但是因为我是新手,所以我无法发布它...我做的工作就是这样:
SELECT
DATE(e.Date) AS e_date,
count(e.ID) AS num_daily_interactions,
(
SELECT
COUNT(id)
FROM example
WHERE DATE(Date) <= e_date
) as total_interactions_per_day
FROM example AS e
GROUP BY e_date;
这会比您的查询效率低吗?如果它的效率更高,我可以在每天提取计数后在python中进行计算,因为这将是返回的数千到数十万行的规模。