【发布时间】:2021-07-14 17:11:52
【问题描述】:
数据样本:
| dtime | id |
|---|---|
| 2021-01-01 06:00:00 | 1 |
| 2021-01-01 06:00:00 | 2 |
| 2021-01-01 06:00:00 | 3 |
| ... | ... |
| 2021-01-01 12:00:00 | 1 |
| 2021-01-01 12:00:00 | 2 |
| 2021-01-01 12:00:00 | 3 |
| ... | ... |
| ... | ... |
| 2021-01-12 20:00:00 | 1 |
| 2021-01-12 20:00:00 | 2 |
| 2021-01-12 20:00:00 | 3 |
在真实数据集中,ids 介于 1 和 9999 之间,dtime 是每 5 分钟,每天 24 小时,我只想在特定时间(例如 06、12、16、20h)进行采样)。
预期输出是count(id) 值的平均值,按DATE(dtime) 分组,但是:
- 只应采样某些
TIME(dtime)(例如06、12、16、20h); -
count(id)应该忽略不在 10 到 500 之间的id; -
如果 ,
count(id)应该被丢弃(并且不考虑平均值)
输出样本:
| DATE(dtime) | AVG(count(id)) |
|---|---|
| 2021-01-01 | 31 |
| 2021-01-02 | 29 |
到目前为止,我得到了:
SELECT dtime,count(id)
FROM cron5min
WHERE (TIME(dtime) = '06:00:00' OR TIME(dtime) = '12:00:00' OR TIME(dtime) = '16:00:00' OR TIME(dtime) = '20:00:00') AND id BETWEEN 10 AND 500 AND estado = 1
GROUP BY dtime
然后我使用PHP根据3进行平均并丢弃数据。
我现在尝试仅使用 MySQL 语句而不是 PHP。
【问题讨论】:
标签: mysql group-by count average sql-date-functions