gpt4 book ai didi

mysql - 同一列有 2 个时区的 gem groupdate 问题

转载 作者:可可西里 更新时间:2023-11-01 06:34:00 28 4
gpt4 key购买 nike

我正在使用 gem ahoy 来跟踪访问情况,并使用 groupdate 来显示每日统计数据。

为了计算每天的访问量,我在 Visit 模型中使用了这个查询:

Visit.group_by_day(:started_at).order('started_at').count

直到第 18 天我的时区从 BRT 更改时,它一直运行良好(-03:00) 至 BRST (-02:00).

现在,上面的查询返回 18 点后每一天的 0 访问次数:

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

但是,如果我只选择最近 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

我直接在 mysql 服务器中执行了这两个查询,都返回了正确的结果。

即,当查询涵盖2个不同时区的记录时,groupdate不能计算最后一个的记录。

我想确定这是一个 groupdate gem 错误。还是我遗漏了什么?

最佳答案

我相信这是因为您正在将两个 convert_tz 之间的 HH:mm:ss 归零

请为“day”变量更新您的 SELECT:

  1. 删除 DATE_FORMAT
  2. 将整个事情放在 DATE() AS day 中

然后将 GROUP BY 值替换为:天 - 或者您可以将上面的更改复制粘贴到分组依据中

关于mysql - 同一列有 2 个时区的 gem groupdate 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33304241/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com