将复杂逻辑转换为MySQL CASE语句

sch*_*one 2 mysql logic join case

我正在将以下逻辑转换为MySQL CASE语句,我确信有一种优雅的方式可以做到这一点,但我认为我一直在努力工作太长时间并且困惑我自己!

业务规则:

  • 程序有programme_start和programme_end
  • 个人有一个attend_start和attend_end

个人在一个时期内参加多个课程,他们只能参加以下示例考勤范围之一:

在此输入图像描述

我需要做的是分类每个跨度为一类,类型,即类型1 ... 9,但我无法建立一个CASE语句中能够相互完全覆盖每个跨度.

以前有人做过这样的事吗?如果没有人可以帮助它背后的逻辑?

提前致谢!

Ric*_*iwi 5

案件非常简单..

在一次性的情况下,只有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)