我有一张类似的表:
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再一次胜过其他人,颜色是蓝色。
答案 0 :(得分: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