PHP Mysql获取时间范围之间的差距

标签 php mysql time difference-between-rows

我是 stackoverflow 的新手。无论如何这是我的问题,希望有人能帮助我解决这个问题。 我在 mysql 中有一个表,见下文

Start Time         End Time         Date
 9:00               10:00           2016-02-26
 9:00               10:00           2016-02-25
 11:00              12:00           2016-02-25
 12:00              13:00           2016-02-25
 13:00              14:00           2016-02-25
 15:00              16:00           2016-02-25

我想得到的是那些时间与特定日期之间的差距。请参阅下面我想要的输出:

Start Time         End Time        Date
 10:00               11:00         2016-02-25
 14:00               15:00         2016-02-25

如果有人知道答案,那将是一个很大的帮助。谢谢

最佳答案

您可以使用以下查询:

SELECT gap_start, gap_end
FROM (
  SELECT (SELECT EndTime
         FROM mytable AS t2
         WHERE t2.EndTime < t1.StartTime
         ORDER BY t2.EndTime DESC LIMIT 1) AS gap_start,
         StartTime AS gap_end
  FROM mytable AS t1) AS t
WHERE gap_start IS NOT NULL

所使用的相关子查询将获取紧接在当前记录之前的记录的 StartTime。这里假设连续记录之间总是有一个间隙。

Demo here

编辑:

为了处理Date 字段的添加,可以像下面这样修改查询:

SELECT gap_start, gap_end, `Date`
FROM (
  SELECT (SELECT EndTime
          FROM mytable AS t2
          WHERE t2.`Date` <= t1.`Date` AND t2.EndTime <= t1.StartTime
          ORDER BY t2.`Date` DESC, t2.EndTime DESC LIMIT 1) AS gap_start,
         StartTime AS gap_end,
         `Date`
  FROM mytable AS t1) AS t
WHERE gap_start IS NOT NULL AND gap_start < gap_end

Demo here

关于PHP Mysql获取时间范围之间的差距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35620051/

相关文章:

php - 用户表(现在)和员工表(过去和现在)之间的正确关系

php - 太多 mysql (ajax) 请求对 php 聊天应用程序有什么负面影响?

PHP mysqli_query 在 foreach 循环中不起作用

php - 令人费解的 .htaccess/PHP 难题

php - 在 PHP 中没有前端的小型简单 CMS 在哪里?

php - MySQL连接三张表

mysql - 将 mysql 嵌入式数据库转储到 SQL 文本文件中

r - 如何拆分日期和时间观察

algorithm - BST O(NLogN) 构建证明

python - 将 12 小时日期/时间字符串转换为 24 小时日期时间