Rod*_*igo 8 ruby mysql activerecord ruby-on-rails
我使用的宝石阿霍伊跟踪访问和groupdate显示每天的统计数据.
要计算每日访问次数,我在Visit模型中使用此查询:
Visit.group_by_day(:started_at).order('started_at').count
Run Code Online (Sandbox Code Playgroud)
它工作正常,直到最后一天18,我的时区从BRT(-03:00)变为BRST(-02:00).
现在,上面的查询返回018之后每天的访问次数:
2.1.3 :026 > puts Visit.group_by_day(:started_at).order('started_at desc').limit(10).count.to_yaml
(0.3ms) SELECT COUNT(*) AS count_all, DATE_ADD(CONVERT_TZ(DATE_FORMAT(CONVERT_TZ(DATE_SUB(started_at, INTERVAL 0 HOUR), '+00:00', 'America/Sao_Paulo'), '%Y-%m-%d 00:00:00'), 'America/Sao_Paulo', '+00:00'), INTERVAL 0 HOUR) AS day FROM `visits` WHERE (started_at IS NOT NULL) GROUP BY DATE_ADD(CONVERT_TZ(DATE_FORMAT(CONVERT_TZ(DATE_SUB(started_at, INTERVAL 0 HOUR), '+00:00', 'America/Sao_Paulo'), '%Y-%m-%d 00:00:00'), 'America/Sao_Paulo', '+00:00'), INTERVAL 0 HOUR) ORDER BY started_at desc LIMIT 10
---
2015-10-14 03:00:00.000000000 Z: 158
2015-10-15 03:00:00.000000000 Z: 127
2015-10-16 03:00:00.000000000 Z: 101
2015-10-17 03:00:00.000000000 Z: 112
2015-10-18 03:00:00.000000000 Z: 111
2015-10-19 03:00:00.000000000 Z: 0
2015-10-20 03:00:00.000000000 Z: 0
2015-10-21 03:00:00.000000000 Z: 0
2015-10-22 03:00:00.000000000 Z: 0
Run Code Online (Sandbox Code Playgroud)
但是,如果我只选择过去5天(全部都在BRST时区),它的工作原理如下:
2.1.3 :027 > puts Visit.group_by_day(:started_at).order('started_at desc').limit(5).count.to_yaml
(0.3ms) SELECT COUNT(*) AS count_all, DATE_ADD(CONVERT_TZ(DATE_FORMAT(CONVERT_TZ(DATE_SUB(started_at, INTERVAL 0 HOUR), '+00:00', 'America/Sao_Paulo'), '%Y-%m-%d 00:00:00'), 'America/Sao_Paulo', '+00:00'), INTERVAL 0 HOUR) AS day FROM `visits` WHERE (started_at IS NOT NULL) GROUP BY DATE_ADD(CONVERT_TZ(DATE_FORMAT(CONVERT_TZ(DATE_SUB(started_at, INTERVAL 0 HOUR), '+00:00', 'America/Sao_Paulo'), '%Y-%m-%d 00:00:00'), 'America/Sao_Paulo', '+00:00'), INTERVAL 0 HOUR) ORDER BY started_at desc LIMIT 5
---
2015-10-19 02:00:00.000000000 Z: 85
2015-10-20 02:00:00.000000000 Z: 72
2015-10-21 02:00:00.000000000 Z: 84
2015-10-22 02:00:00.000000000 Z: 80
2015-10-23 02:00:00.000000000 Z: 21
Run Code Online (Sandbox Code Playgroud)
我直接在mysql服务器上做了这两个查询,两者都返回了正确的结果.
即,当查询覆盖具有2个不同时区groupdate 的记录时,不能计算最后一个记录.
我想确保这是一个groupdate gem bug.或者我错过了什么?
小智 1
我相信这是因为您正在将两个 Convert_tz 之间的 HH:mm:ss 归零
请更新“day”变量的 SELECT:
然后将 GROUP BY 值替换为:day - 或者您可以将上面的更改复制粘贴到 group by 中
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |