sch*_*one 2 mysql logic join case
我正在将以下逻辑转换为MySQL CASE语句,我确信有一种优雅的方式可以做到这一点,但我认为我一直在努力工作太长时间并且困惑我自己!
业务规则:
个人在一个时期内参加多个课程,他们只能参加以下示例考勤范围之一:

我需要做的是分类每个跨度为一类,类型,即类型1 ... 9,但我无法建立一个CASE语句中能够相互完全覆盖每个跨度.
以前有人做过这样的事吗?如果没有人可以帮助它背后的逻辑?
提前致谢!
案件非常简单..
在一次性的情况下,只有3种方式可以分类 - 之前,之后和之后.涉及两次,因此3 x 3 = 9个结果.
虽然有一些关于一致性的说法,因为对于_start,它会:
on - after - before
Run Code Online (Sandbox Code Playgroud)
然而,对于_end时间,它会去
on - before - after
Run Code Online (Sandbox Code Playgroud)
使用它们组合(假设不考虑NULL):
case when programme_start = attend_start then 0
when programme_start < attend_start then 3
else 6 end
+
case when programme_end = attend_end then 1
when programme_end > attend_end then 2
else 3 end
AS Category
Run Code Online (Sandbox Code Playgroud)