Sql 使用多列查找最新记录

Sql 使用多列查找最新记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图找出如何在一个表中提取每个人都有多条记录的最新记录。我需要基于一个数字字段的组合,这个数字字段更容易与一个文本字段组合,这个文本字段可以是三个不同单词中的一个 以下是一些数据的简略示例: personID | Year | Term 01 | 2012 | Fall 01 | 2013 | Spring 01 | 2013 | Summer 06 | 2012 | Spring 06 | 2012 | Fall 11

我试图找出如何在一个表中提取每个人都有多条记录的最新记录。我需要基于一个数字字段的组合,这个数字字段更容易与一个文本字段组合,这个文本字段可以是三个不同单词中的一个

以下是一些数据的简略示例:

personID | Year | Term
      01 | 2012 | Fall
      01 | 2013 | Spring
      01 | 2013 | Summer
      06 | 2012 | Spring
      06 | 2012 | Fall
      11 | 2013 | Fall
我需要运行一个select语句,该语句将根据最近一年为每个人提取最新记录,然后在这一年内,最早的期限是春季,然后是夏季,然后是秋季。因此,希望最终结果如下所示:

personID | Year | Term
      01 | 2013 | Summer
      06 | 2012 | Fall
      11 | 2013 | Fall
我知道如何使用maxyear并使其与表中的year字段相等,但这只是一列。当有人在那一年有一个以上的记录时,它会拉取那一年的每个学期,我不能排序,因为它是文本,甚至不是字母顺序。如果有人能帮我做这件事,那就太棒了。如果需要提供更多信息,请告诉我。

您可以使用ROW_NUMBER在按年份和期限排序的每个组中生成序列号

您可以使用ROW_NUMBER在按年份和期限排序的每个组中生成序列号

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