1

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

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

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 字段,但这只是做那一列。当某人在那一年有不止一个记录时,它会提取那一年的每个术语,我无法订购它,因为它是文本,甚至不是字母顺序。如果有人能帮我解决这个问题,那就太棒了。如果我需要提供更多信息,请告诉我。

4

1 回答 1

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
于 2013-09-12T16:48:53.313 回答