【问题标题】:Get stats on time difference between 2 dates获取 2 个日期之间时差的统计信息
【发布时间】:2020-10-08 17:15:59
【问题描述】:

我在 MYSQL 中有 2 个表。第一个包含我的所有预订以及预订日期,第二个包含我所有可用日期时间格式的旅行日期。

这是一个示例:为 2 个不同的旅行进行了 4 次预订。

表:我的预订

ID DATEADD               IDTOUR
1  2020-08-01 13:30:00   1
2  2020-08-02 13:30:00   1
3  2020-08-03 13:30:00   2
4  2020-08-09 13:30:00   2

表:myTours

ID  TOUR
1   2020-08-10 13:30:00
2   2020-08-11 13:30:00

我想在 PHP/MYSQL 中概览客户预订的时间间隔。

我想显示:

对于少于 24 小时的预订,旅行日期前少于 1 小时、1 小时至 2 小时等之间的预订总数...

然后,对于超过 24 小时的预订,预订和旅行日期之间的天数。

我发现 DATEDIFF 来获取两个日期之间的时间间隔,但我需要帮助才能完成查询并正确显示结果。

SELECT DATEDIFF(DATEADD, TOUR) as total FROM myBooking JOIN myTours ON myBooking.IDTOUR = myTours.ID

结果应该是这样的:

< 1hour : (number of bookings made less than 1hour before the tour)
1-2hours : (number of bookings made between 1-2hours before the tour)
3-4hours : (number of bookings made between 3-4hours before the tour)

等到 24 小时...

2 days : (number of bookings made 2 days before the tour)
3 days : (number of bookings made 3 days before the tour)

等到 30 天...

【问题讨论】:

  • 在示例数据中,每次旅行有 2 次预订。您要考虑哪些预订?第一的?最后的?全部?
  • 您好,我想大致了解一下我的客户通常何时预订。所以我所有预订的全球统计数据。

标签: php mysql


【解决方案1】:

我发现 DATEDIFF 来获取两个日期之间的时间间隔,但我需要帮助才能完成查询并正确显示结果。

DATEDIFF 不适用于此任务,因为:

  1. 对于某些行,您需要以小时为单位的差异 - DATEDIFF 仅计算以天为单位的差异。
  2. DATEDIFF 在计算前截断时间部分。

解决方案可能是,例如(示意性地):

SELECT ...
         CASE WHEN TIMESTAMPDIFF(HOUR, booking.date, tour.date) < 24
              THEN CONCAT(TIMESTAMPDIFF(HOUR, booking.date, tour.date), ' hours')
              ELSE CONCAT(TIMESTAMPDIFF(DAY, booking.date, tour.date), ' days')
              END AS IntervalLength
...
GROUP BY IntervalLength
...

这将为每个单独的小时/天提供统计数据。


如果您需要严格描述的统计周期(

CREATE TABLE periods ( hours_from INT, hours_till INT, name INT );
INSERT INTO periods VALUES
(0,0,'<1 hour'),
(1,2,'1-2 hours'),
...
(24,47,'1 day'),
...
(720,743,'30 days'),
(744,99999999,'over 30 days');

通过

将其加入您的餐桌
ON TIMESTAMPDIFF(HOUR, booking.date, tour.date) 
   BETWEEN periods.hours_from 
       AND periods.hours_till

并按periods.name分组。

【讨论】:

    猜你喜欢
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    相关资源
    最近更新 更多