【问题标题】:Mysql query for specific date and time rangeMysql查询特定日期和时间范围
【发布时间】:2020-09-30 18:42:15
【问题描述】:

我有这样的桌子

+--------+------------------+------------------+
|  Job   | jobRegisterTime  |  Job done time   |
+--------+------------------+------------------+
| job 1  | 2020-09-01 19:28 | 2020-09-02 10:28 |
| job 2  | 2020-09-02 09:28 | 2020-09-02 19:28 |
| job 3  | 2020-09-02 09:28 | 2020-09-02 10:28 |
| job 4  | 2020-09-04 09:28 | 2020-09-05 10:28 |
| job 5  | 2020-09-05 09:28 | 2020-09-05 10:28 |
| job 6  | 2020-09-12 09:28 | 2020-09-12 16:28 |
| job 7  | 2020-09-13 09:28 | 2020-09-13 10:28 |
| job 8  | 2020-09-14 09:28 | 2020-09-14 19:28 |
| job 9  | 2020-09-15 09:28 | 2020-09-16 10:28 |
| job 10 | 2020-09-16 19:28 | 2020-09-17 10:28 |
| job 11 | 2020-09-17 15:28 | 2020-09-18 05:28 |
| job 12 | 2020-09-12 09:28 | 2020-09-12 09:58 |
+--------+------------------+------------------+

而且我不知道如何编写好的查询。条件第一部分计算整个月注册时间之间日期范围内的所有作业,例如 2020-09-01 和 2020-09-30 这个简单的我将在哪里和之间使用。第二部分是筛选工作时间从 8 小时到 17 小时之间在 2 小时内完成的工作。问题是我需要包括像这个例子这样的工作,如果工作在 16 小时注册并在第二天完成,直到 9 小时才算数,因为下班后的工作时间为零,直到下一个工作日。

再举几个例子:

Register time | Done time
2020-09-16 19:28 | 2020-09-17 9:28 = counts (Because it registered after work and done next day in work hours done 9:28 - 8:00 = 1:28
2020-09-16 11:28 | 2020-09-16 19:28 = doesn't count( range more than two hours)
2020-09-15 15:30 | 2020-09-16 08:30 Counts (because exclude not work hours. Difference 17:00 - 15:30 = 1:30 and 8:30 - 8:00 = 0:30 1:30 +0:30 = 2:00h

有人可以帮忙写出正确的条件吗?

【问题讨论】:

    标签: mysql sql where-clause


    【解决方案1】:

    你基本上可以做这样的事情来获得不包括 16:00 - 08:00 的工作持续时间。 (https://www.db-fiddle.com/f/jJUhydQkhfwKkjqhCQPN7b/0)

    SELECT CASE
            WHEN DATE(jobDoneTime) > DATE(jobRegisterTime) 
            THEN TIMESTAMPDIFF(MINUTE,jobRegisterTime,jobDoneTime)- 16*60
            ELSE TIMESTAMPDIFF(MINUTE,jobRegisterTime,jobDoneTime) END duration_minutes,
            Job, jobRegisterTime, JobDoneTime 
      FROM  job
    

    但是您的数据有一些边缘情况,其中开始和.或结束时间位于 08:00 - 16:00 之外。在这种情况下,您可能需要弄清楚您想要什么。

    【讨论】:

    • 不错的一个几乎我需要的我如何在 where 子句中使用下面的 duration_minutes?收到此错误 #1054 - 'where 子句'中的未知列 'duration_minutes'
    • 持续时间分钟与结果不匹配
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2011-01-01
    • 1970-01-01
    • 2021-01-03
    相关资源
    最近更新 更多