【发布时间】:2018-04-10 10:15:01
【问题描述】:
我目前正在努力研究如何在其他时间聚合(周、月、季度等)中聚合我的每日数据。
这是我的原始数据类型的样子:
| date | traffic_type | visits |
|----------|--------------|---------|
| 20180101 | 1 | 1221650 |
| 20180101 | 2 | 411424 |
| 20180101 | 4 | 108407 |
| 20180101 | 5 | 298117 |
| 20180101 | 6 | 26806 |
| 20180101 | 7 | 12033 |
| 20180101 | 8 | 80368 |
| 20180101 | 9 | 69544 |
| 20180101 | 10 | 39919 |
| 20180101 | 11 | 26291 |
| 20180102 | 1 | 1218490 |
| 20180102 | 2 | 410965 |
| 20180102 | 4 | 108037 |
| 20180102 | 5 | 297727 |
| 20180102 | 6 | 26719 |
| 20180102 | 7 | 12019 |
| 20180102 | 8 | 80074 |
首先,无论traffic_type如何,我都想检查访问总和:
SELECT date, SUM(visits) as visits_per_day
FROM visits_tbl
GROUP BY date
结果如下:
| ymd | visits_per_day |
|:--------:|:--------------:|
| 20180101 | 2294563 |
| 20180102 | 2289145 |
| 20180103 | 2300367 |
| 20180104 | 2310256 |
| 20180105 | 2368098 |
| 20180106 | 2372257 |
| 20180107 | 2373863 |
| 20180108 | 2364236 |
但是,如果我想检查每个时间聚合中 visits_per_day 最高的特定日期(例如:月份),我正在努力检索正确的输出。
这是我所做的:
SELECT
(date div 100) as y_month, MAX(visits_per_day) as max_visit_per_day
FROM
(SELECT date, SUM(visits) as visits_per_day
FROM visits_tbl
GROUP BY date) as t1
GROUP BY
y_month
这是我的查询的输出:
| y_month | max_visit_per_day |
|:-------:|:-----------------:|
| 201801 | 2435845 |
| 201802 | 2519000 |
| 201803 | 2528097 |
| 201804 | 2550645 |
但是,我不知道visits_per_day 最高的确切日期是哪一天。
期望的输出:
| y_month | max_visit_per_day | ymd |
|:-------:|:-----------------:|:--------:|
| 201801 | 2435845 | 20180130 |
| 201802 | 2519000 | 20180220 |
| 201803 | 2528097 | 20180325 |
| 201804 | 2550645 | 20180406 |
ymd 表示visits_per_day 最高的那一天。 该逻辑将在编程的帮助下在仪表板中使用,以便自动选择时间聚合。 有人可以帮帮我吗?
【问题讨论】:
-
有什么理由发明自己的
DATE表示而不是使用 MySQLDATE数据类型?日期逻辑很难正确处理,以至于大多数人都使用内置数据类型。 -
使用 MySQL 日期类型将使这成为可能。然后你就可以使用内置函数了。
-
@O.Jones 我相信我可以使用日期功能。没问题。我只是代表了它当前在数据库中的写入方式。如果我使用实际的日期数据类型,您能以某种方式帮助我吗?