2011-03-20 102 views
2

我正在將以下邏輯轉換爲MySQL CASE語句,我確定有一種優雅的方式來執行此操作,但我認爲我一直在努力工作太久而且感到困惑我的自我!將複雜邏輯轉換爲MySQL CASE語句

的業務規則:

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

個人在一個週期內參加多個項目,他們只能有一個以下示例考勤跨度:

enter image description here

我需要做的是將每個跨度分類到一個類別類型,即類型1 ... 9.但我無法建立一個CASE語句,它可以相互獨立地覆蓋每個跨度。

有沒有人做過這樣的事情?如果沒有人可以幫助其背後的邏輯?

在此先感謝!

回答

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 
+0

整潔的把戲加上案件在一起!還沒有決定,如果我認爲這是黑客或天堂......但你得到我的投票:) – Ronnis 2011-03-20 22:16:20

+0

好工作!謝謝! – schone 2011-03-21 00:38:34