sql - 为特定星期几或日期范围创建的累积平均记录数

标签 sql mysql statistics

是的,所以我正在为一个新客户项目填写需求文档,他们要求根据我们数据库中的现有数据计算出增长趋势和绩效预期。

此类数据的最佳来源是我们的日志表,因为我们几乎记录了应用程序中发生的每笔交易。

现在,问题来了,在整理累计总和和运行平均值方面,我对 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/

相关文章:

php - 如何从sql中跳过一行?

python - 为什么 statsmodels select_order 函数与 AR 模型的参数不同?

sql - Postgres 默认选择最高的有序设置(sql fiddle)

mysql - 在具有多个连接的 SQL 中按商品选择最低价格

sql - If 语句 VBA 访问的 bool 问题

java - SQLite 复合键错误

MySQL 嵌套选择

mysql - 获取每位老师成绩最低的学生

python statsmodels.tsa.stattools.pacf 与掩码数组?

python - 如何计算 Python 中加权邻接矩阵的拓扑重叠度量 [TOM]?