【问题标题】:Grouping by Month i.e. 30 days from the starting timestamp rather than the actual month按月分组,即从起始时间戳算起 30 天,而不是实际月份
【发布时间】:2020-01-04 18:52:36
【问题描述】:

我有一个每月提供给客户 30 分钟使用时间的产品,我需要统计他们的使用情况并按月分组,但不确定最好的处理方法,因为开始日期可能是月。

我应该按比例分配吗?转换成整月还是计算天数?

有没有一种理想的方法来计算这个?假设每个月他们有 30 分钟的使用时间,所以我想统计那个“月”使用了多少分钟。

假设有一个分钟使用表,订阅的开始日期是 2019-06-13 00:00:00

minutes_used_table:

Userid                MinutesUsed               Date

1                         5                    2019-06-19
1                         6                    2019-06-23
1                         8                    2019-06-28
1                         15                   2019-07-05
1                         3                    2019-07-12
1                         8                    2019-07-19
1                         5                    2019-08-14
1                         3                    2019-08-22
1                         1                    2019-08-26
1                         2                    2019-09-13

或者,我是否应该按比例分配,而不是以 30 天为增量进行跟踪,如果它们从 6 月 13 日开始,我是否应该只计算从开始日期到月底的天数,无论那是之后的哪一天从月初到开始日期的天数?

想知道什么是最有意义的以及如何执行它?

【问题讨论】:

  • 我会采用 30 天间隔的方法。使用 30.42 天的间隔可能更合适

标签: mysql


【解决方案1】:

使用

GROUP BY DATEDIFF(`Date`, @starting_date) DIV @period_length

在您的特定情况下,它将是

GROUP BY DATEDIFF(`Date`, '2019-06-13 00:00:00') DIV 30

【讨论】:

    【解决方案2】:

    从编码的角度来看,找到用户的第一个日期并不是什么大问题,从日期中减去它并计算 30 天的周期数。 但这在未来将很难支持,并且该解决方案将有许多极端情况:例如有人在 1 月 20 日开始使用产品,在使用一个月后闲置一段时间并在 4 月回来,5 . 该案例的正确开始日期是什么时候?

    所以我建议使用日历月。并且可能会根据剩余天数减少第一个月的限制,或者即使在第一个月也可以提供完整的试用期,因为用户有能力花费 30 分钟。

    【讨论】:

      猜你喜欢
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 2013-01-24
      • 2012-03-30
      • 1970-01-01
      • 2015-04-13
      • 2013-08-07
      相关资源
      最近更新 更多