【问题标题】:Get 30 minutes interval data between start and end time in mysql在mysql中获取开始和结束时间之间的30分钟间隔数据
【发布时间】:2014-11-20 18:24:35
【问题描述】:

我在mysql中有表结构,

table_id  no_people  booking_date  bookingend_time      bookingstart_time
      14          2  2014-10-31    2014-10-31 13:30:00  2014-10-31 11:00:00
       5          4  2014-10-31    2014-10-31 16:30:00  2014-10-31 14:30:00
       6          2  2014-10-31    2014-10-31 17:00:00  2014-10-31 16:00:00
       2          4  2014-11-06    2014-11-06 12:30:00  2014-11-06 10:00:00
       2          4  2014-10-31    2014-10-31 16:00:00  2014-10-31 14:00:00
       3          4  2014-11-01    2014-11-01 09:00:00  2014-11-01 07:30:00
       6          2  2014-11-01    2014-11-01 10:00:00  2014-11-01 07:30:00
       2          4  2014-11-03    2014-11-03 10:30:00  2014-11-03 08:30:00
       5          4  2014-11-04    2014-11-04 10:30:00  2014-11-04 08:30:00
       3          4  2014-11-05    2014-11-05 09:30:00  2014-11-05 07:30:00
      14          2  2014-11-05    2014-11-05 09:30:00  2014-11-05 07:30:00

我想检索开始和结束时间间隔为 30 分钟的 table_id 数据。

例如: 如果我给预订开始时间 10:30 和结束时间 12:30 我应该得到 14 作为行.. 同样,它应该检查所有行并在两次之间返回..

到目前为止我的查询

SELECT `table_id` FROM `booking` WHERE bookingstart_time>='2014-10-31 10:30:00' AND bookingend_time<='2014-10-31 11:30:00'

【问题讨论】:

  • 您是否想要在指定时间间隔内或指定间隔的 30 分钟内获取“忙碌”的行?换句话说,如果输入搜索间隔是“10:00-11:00”,那么您想要拉取开始/结束时间为“09:00-12:00”、“11:01-13:00”的行, "09:00-09:59", 但不是 "09:00-09:29"?
  • 是的。我该怎么做呢
  • 您可能希望在您的问题中记录这些案例。最好将所有相关信息保留在问题正文中。

标签: mysql sql


【解决方案1】:

第 1 步:将输入时间范围扩大前 30 分钟和后 30 分钟。 DATE_ADD()DATE_SUB() 可以做到这一点:

DATE_SUB(_input_start_date_here_, INTERVAL 30 MINUTE)

第 2 步:根据开始和结束时间重新考虑您的问题。以下是可能的情况:

  • 如果预订在(扩展的)期间开始,那么您希望此预订出现在您的结果中
  • 或者如果预订在该期间之前开始,那么您需要此预订,除非它也在该期间之前结束
  • 另一方面,如果预订在该期限之后开始,那么您不想要此预订

上面的第一种情况可以这样表达:

WHERE bookingstart_time >= DATE_SUB(_input_start_date_here_, INTERVAL 30 MINUTE)
AND bookingstart_time <= DATE_ADD(_input_end_date_here_, INTERVAL 30 MINUTE)

第二个条件留作练习。您还可以使用更优雅的BETWEEN 运算符重写上述内容。

【讨论】:

    【解决方案2】:

    SELECT restaurant_table FROM rest_restaurantbooking WHERE TIMESTAMPDIFF(SECOND, bookingstart_time, bookingend_time) > 1800。

    供参考:HERE

    【讨论】:

    • 它显示所有表格。我需要检索在给定预订开始和结束时间之间发生的表格。此查询与我无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多