Перевод сложной логики в оператор MySQL CASE - PullRequest
2 голосов
/ 20 марта 2011

Я перевожу следующую логику в оператор MySQL CASE, я уверен, что есть элегантный способ сделать это, но я думаю, что слишком долго работал над этим и запутал себя!

Бизнес-правила:

  • В программах есть programme_start и programme_end
  • Физические лица имеют Participant_start и Particip_end
* 1010.у них может быть только один из следующих примерных диапазонов посещаемости:

enter image description here

Что мне нужно сделать, так это классифицировать каждый диапазон в тип категории, т.е. Тип 1 ... 9. но яУ меня проблемы с созданием оператора CASE, который может взаимно исключительно охватывать каждый диапазон.

Кто-нибудь делал что-то подобное раньше?Если нет, то может ли кто-нибудь помочь с логикой?

Заранее спасибо!

1 Ответ

5 голосов
/ 20 марта 2011

Случаи довольно простые ..

В случае единственного времени есть только 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
...