从可能包含倍数的表中选择最“重要”的行

时间:2013-01-16 19:58:14

标签: sql-server

我有一张类似的表:

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再一次胜过其他人,颜色是蓝色。

1 个答案:

答案 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