1

それぞれが複数のレコードを持つテーブル内の人々の最新のレコードを取得する方法を理解しようとしています。これは、数値フィールド (簡単です) とテキスト フィールド (3 つの異なる単語のいずれか) の組み合わせに基づいている必要があります。

以下は、一部のデータがどのように見えるかの簡略化された例です。

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

最新の年に基づいて各 personID の最新のレコードを取得する select ステートメントを実行する必要があります。次に、その年の範囲内で、期間 (最も早いのは春、次に夏、次に秋) です。したがって、うまくいけば、最終結果は次のようになります。

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

max(year) を使用してテーブルの年フィールドと等しくする方法は知っていますが、それはその1つの列だけを行っています。誰かがその年に複数のレコードを持っている場合、その年のタームがプルされますが、テキストでありアルファベット順でさえないため、注文できません。誰かがこれで私を助けることができれば、それは素晴らしいことです. さらに情報を提供する必要がある場合はお知らせください。

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 に答える