2013-01-16 43 views
-1

我有一個類似的表:選擇從表中最「重要」的行可能含有倍數

incident_id action action_date 
----------- ------ ----------- 
    1   A  2012-12-01 
    2   A  2012-12-01 
    2   Z  2012-12-02 
    3   A  2012-12-03 
    3   Z  2012-12-04 
    3   G  2012-12-05 

在真正的表有更多的動作和日期日期時間。

這裏是我想要的結果:

incident_id color 
----------- ----- 
    1   GREEN 
    2   RED 
    3   BLUE 

我不知道如何做到這一點,我很虛弱一般的SQL。

糟糕,抱歉沒有解釋顏色。好的,如果事件有行動A,那麼它的綠色。動作B勝過A,然後顏色變成紅色。再次,行動C勝過其他人,顏色是藍色的。

+5

究竟如何做這些顏色會被分配?什麼使事件記錄「重要」?我們很好,但我們不是通靈。 –

+2

顏色名稱從哪裏來?這是基於計數嗎?按字母順序排列的最高行爲(或反向)?最新的行動?我們還沒有看到其他的東西? –

+2

什麼?這些顏色是從哪裏來的? – Lamak

回答

1

你可以加入到映射行列的行動和(永久或派生)表中找到MAX

WITH Actions(action, priority) 
    AS (SELECT 'A', 1 UNION ALL 
     SELECT 'Z', 2 UNION ALL 
     SELECT 'G', 3) 
SELECT Y.incident_id, 
     CASE MAX(A.priority) 
     WHEN 1 THEN 'GREEN' 
     WHEN 2 THEN 'RED' 
     WHEN 3 THEN 'BLUE' 
     END 
FROM YourTable Y 
     JOIN Actions A 
     ON A.action = Y.action 
GROUP BY Y.incident_id 
+0

我編輯了這個問題,因爲實際上這些操作不是字母順序。對不起,我應該發佈一個更準確的表示形式。 –