私はこのコードを使用しています:(この質問から: SQLでグループごとに最後のレコードを取得する方法 自分の列を置き換える)
WITH e AS
(
SELECT *,
ROW_NUMBER() OVER
(
PARTITION BY ApplicationId
ORDER BY theDate DESC
) AS Recency
FROM [Event]
)
SELECT *
FROM e
WHERE Recency = 1
2つのフィールドが同じ場合にのみ「分割」できますか?たとえば、次のようなデータがあります。
ID Name theDate
123 John 01/01/2012
123 John 01/02/2012
123 Doe 01/01/2012
456 Smith 02/04/2012
789 Smith 02/01/2012
789 Smith 02/09/2012
789 Roger 02/08/2012
そのデータから私は返したい:
ID Name theDate
123 John 01/02/2012
123 Doe 01/01/2012
456 Smith 02/04/2012
789 Smith 02/09/2012
789 Roger 02/08/2012
助けてくれてありがとう。
トーマス
私はそれをここで答えを見つけました: 2列を使用したテーブル分割
1つの列でのみパーティション化できますが、次のようにその列を生成して「複数のパーティション」を作成できます。
WITH e AS
(
SELECT *,
ROW_NUMBER() OVER
(
PARTITION BY CONVERT(VARCHAR(100),ApplicationId) + ' ' + Name
ORDER BY theDate DESC
) AS Recency
FROM [Event]
)
SELECT *
FROM e
WHERE Recency = 1
2つの列を1つの文字列として一緒に追加すると、両方の列が同一の場合にのみ分割されます。
複数の列をコンマで区切ることができます
WITH e AS
(
SELECT *,
ROW_NUMBER() OVER
(
PARTITION BY ApplicationId , Name
ORDER BY theDate DESC
) AS Recency
FROM [Event]
)
SELECT *
FROM e
WHERE Recency = 1