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

时间:2011-03-20 11:50:50

标签: mysql join logic case

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

业务规则:

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

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

enter image description here

我需要做的是将每个范围分类为类别类型,即类型1 ... 9.但我在构建CASE语句时遇到问题,该语句可以互相覆盖每个范围。

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

提前致谢!

1 个答案:

答案 0 :(得分:5)

案件非常简单..

在一次性的情况下,只有3种方式可以分类 - 之前,之后和之后。有两次涉及,所以3 x 3 = 9结果。

虽然有一些关于一致性的说法,因为对于_start,它会:

on - after - before

然而,对于_end时间,它是

on - before - after

使用它们组合(假设不考虑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