是的,所以我正在为一个新客户项目填写需求文档,他们要求根据我们数据库中的现有数据计算出增长趋势和绩效预期。
此类数据的最佳来源是我们的日志表,因为我们几乎记录了应用程序中发生的每笔交易。
现在,问题来了,在整理累计总和和运行平均值方面,我对 MySql 没有太多经验。我将以下查询放在一起,这对我来说很有意义,但它只是一直锁定命令控制台。事情需要永远执行,测试样本中只有 80k 条记录。
因此,给定以下基本表结构:
id | action | date_created
1 | 'merp' | 2007-06-20 17:17:00
2 | 'foo' | 2007-06-21 09:54:48
3 | 'bar' | 2007-06-21 12:47:30
... thousands of records ...
3545 | 'stab' | 2007-07-05 11:28:36
我将如何计算一周中每一天创建的平均记录数?
day_of_week | average_records_created
1 | 234
2 | 23
3 | 5
4 | 67
5 | 234
6 | 12
7 | 36
我有以下查询,这让我想通过将我的 body 从电梯井中抛下...并落在一些子弹上来自杀:
SELECT
DISTINCT(DAYOFWEEK(DATE(t1.datetime_entry))) AS t1.day_of_week,
AVG((SELECT COUNT(*) FROM VMS_LOGS t2 WHERE DAYOFWEEK(DATE(t2.date_time_entry)) = t1.day_of_week)) AS average_records_created
FROM VMS_LOGS t1
GROUP BY t1.day_of_week;
障碍?请不要再让我割伤自己。 :'(
最佳答案
在对这些信息进行抽样时,您需要回溯多远?只要不到一年,该解决方案就有效。
由于记录的星期几和周数是常量,因此创建一个包含 ID、WeekNumber 和 DayOfWeek 的配套表。每当您想运行此统计信息时,只需从您的主表中生成“丢失”的记录即可。
然后,您的报告可以是:
select
DayOfWeek
, count(*)/count(distinct(WeekNumber)) as Average
from
MyCompanionTable
group by
DayOfWeek
当然,如果表格太大,那么您可以改为每天预先汇总数据并使用它,并在运行报告时从您的主表中添加“今天”的数据。
关于sql - 为特定星期几或日期范围创建的累积平均记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1818122/