使用多列查找最新记录

时间:2013-09-12 16:45:49

标签: sql sql-server tsql

我正在试图弄清楚如何为每个人都有多条记录的人提取最新记录。我需要将数字字段(更容易)与文本字段(可能是三个不同的单词之一)组合在一起。

以下是一些数据的缩写示例:

personID | Year | Term
      01 | 2012 | Fall
      01 | 2013 | Spring
      01 | 2013 | Summer
      06 | 2012 | Spring
      06 | 2012 | Fall
      11 | 2013 | Fall

我需要运行一个select语句,根据最近一年,然后在那一年内按期限(最早是春天,然后是夏天,然后是秋天)拉出每个personID的最新记录。所以希望最终结果如下:

personID | Year | Term
      01 | 2013 | Summer
      06 | 2012 | Fall
      11 | 2013 | Fall

我知道如何使用max(year)并使其等于表中的year字段,但这只是执行那一列。当某人在那一年有多个记录时,它会拉出该年度的每个术语,我无法订购,因为它是文本,甚至不是按字母顺序排列的。如果有人能帮助我,这将是惊人的。如果我需要提供更多信息,请告诉我。

1 个答案:

答案 0 :(得分:4)

您可以使用ROW_NUMBER()YEARTerm订购的每个论坛中生成序号。

SELECT  personID, year, Term
FROM
(
    SELECT  personID, year, Term,
            ROW_NUMBER() OVER (PARTITION BY personID ORDER BY YEAR DESC,
                                CASE WHEN Term = 'spring' THEN 1
                                    WHEN Term = 'summer' THEN 2
                                    ELSE 3 END DESC) rn
    FROM    tableName
) a
WHERE   a.rn = 1