我正在试图弄清楚如何为每个人都有多条记录的人提取最新记录。我需要将数字字段(更容易)与文本字段(可能是三个不同的单词之一)组合在一起。
以下是一些数据的缩写示例:
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字段,但这只是执行那一列。当某人在那一年有多个记录时,它会拉出该年度的每个术语,我无法订购,因为它是文本,甚至不是按字母顺序排列的。如果有人能帮助我,这将是惊人的。如果我需要提供更多信息,请告诉我。
答案 0 :(得分:4)
您可以使用ROW_NUMBER()
在YEAR
和Term
订购的每个论坛中生成序号。
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