首页 > 解决方案 > MySQL 查询以了解计划合规性

问题描述

我有一个表Works,其中我得到了列start_dateend_date,它们是日期时间类型和qtty tinyint。为了涵盖这些作品,我得到了另一个名为Turns的表,它也有start_turnend_turn两种日期时间类型。

需要为大于或等于qtty的人数(分配了轮次)覆盖作品,但轮次不一定需要从works.start_dateworks.end_date

我需要知道的是作品是否被正确覆盖,我的意思是,从start_dateend_date的作品是否总是被至少qtty人覆盖。

例如:案例 1

工作 =>开始日期 = 2018-07-01 10:00 | end_date = 2018-07-01 22:00 | qtty = 2
转 =>
人 A:start_turn = 2018-07-01 10:00 | end_turn = 2018-07-01 22:00
B 人:start_turn = 2018-07-01 10:00 | end_turn = 2018-07-01 16:00
C 人:start_turn = 2018-07-01 16:00 | end_turn = 2018-07-01 22:00

案例二

工作 =>开始日期 = 2018-07-01 10:00 | end_date = 2018-07-01 22:00 | qtty = 2
转 =>
人 A:start_turn = 2018-07-01 10:00 | end_turn = 2018-07-01 22:00
B 人:start_turn = 2018-07-01 16:00 | end_turn = 2018-07-01 22:00
C 人:start_turn = 2018-07-01 16:00 | end_turn = 2018-07-01 22:00

看到第一种情况,我们可以解决它,只需提取工作的分钟数乘以qtty,然后将该值与每轮分钟的总和进行比较,然后答案是肯定的,工作被正确覆盖。但是将这种方法应用于第二种情况,答案也是肯定的,但这是不正确的,因为从start_dateend_date至少有两个人的工作不包括在内。

我怎么能做到?任何帮助,将不胜感激。

编辑

这是正确的 SQL 小提琴:http ://sqlfiddle.com/#!9/c53d1b

标签: mysqlsqldatetimetimestamp

解决方案


不是答案;太长的评论:

Case 1 : Qtty = 2


   10 11 12 13 14 15 16 17 18 19 20 21 22
A  |------------------------------------|
B  |------------------|
C                     |-----------------|

Case 2 : Qtty = 2

   10 11 12 13 14 15 16 17 18 19 20 21 22
A  |------------------------------------|
B                     |-----------------|
C                     |-----------------|

案例2似乎满足了“这些作品不一定需要从works.start_date到works.end_date”的要求


推荐阅读