17

私はこのコードを使用しています: (この質問から: 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

助けてくれてありがとう。

トーマス

4

2 に答える 2

41

コンマで区切られた複数の列を持つことができます

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 
于 2012-04-18T01:45:08.113 に答える
6

ここで答えを見つけました: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 つの文字列として一緒に追加すると、両方の列が同一である場合にのみパーティション化されます。

于 2012-04-18T02:10:33.463 に答える