【发布时间】:2018-07-23 00:34:01
【问题描述】:
我有一张 Works 表,其中包含 start_date 和 end_date 列> 是日期时间类型和 qtty tinyint。为了涵盖这些作品,我得到了另一个名为 Turns 的表格,其中包含 start_turn 和 end_turn两种日期时间类型。
作品需要为大于或等于 qtty 的人数(被分配轮数)覆盖,但轮数不一定需要从 works.start_date 到 works.end_date。
我需要知道的是,这些作品是否得到了适当的报道,我的意思是这些作品是否总是为来自 的至少 qtty 人提供报道start_date 到 end_date。
例如:案例 1
工作 => 开始日期 = 2018-07-01 10:00 | 结束日期 = 2018-07-01 22:00 | 数量 = 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
案例 2
工作 => 开始日期 = 2018-07-01 10:00 | 结束日期 = 2018-07-01 22:00 | 数量 = 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_date 到 结束日期。
我怎么做到的?任何帮助将不胜感激。
编辑
这是正确的 SQL Fiddle:http://sqlfiddle.com/#!9/c53d1b
【问题讨论】:
-
好的,我添加了一个 SQL 小提琴。
-
sqlfiddle.com/#!9/ef328b/4 ... 或类似的东西
-
感谢草莓的回复。但是很抱歉,我在 SQL Fiddle 中插入语句的外键出错了。我刚刚更新了 SQL Fiddle,如果你能再次看到它会很棒。
-
错误出现在“CASE 2”之前:
insert into turns values (4, 1, '2018-08-01 10:00', '2018-08-01 22:00');现在:insert into turns values (4, 2, '2018-08-01 10:00', '2018-08-01 22:00');
标签: mysql sql datetime timestamp