-4

次のような「スコア」と呼ばれる単一のテーブルがある場合:

PLAYER DATE     SCORE
joe    3/1/13   4 
joe    3/3/13   5 
joe    3/6/13   3 
dave   3/3/13   6
dave   3/5/13   8
dave   3/7/13   7

各プレイヤーの最新のスコアを照会するにはどうすればよいですか? このような結果セットを生成するには:

PLAYER  LATEST_SCORE
john    3
dave    7
4

3 に答える 3

2

次の SQL は、特定のユーザー名が特定の日付に対して 1 つのエントリしか持てないという条件の下で機能します。

CREATE TABLE #t1 (
    player varchar(max),
    dated datetime,
    score int
)

insert into #t1 values ('joe', '2013-03-01', 4)
insert into #t1 values ('joe', '2013-03-03', 5)
insert into #t1 values ('joe', '2013-03-06', 3)

insert into #t1 values ('dave', '2013-03-03', 6)
insert into #t1 values ('dave', '2013-03-05', 8)
insert into #t1 values ('dave', '2013-03-07', 7)

SELECT  player, score
from    #t1 AS t1
WHERE   dated = (SELECT MAX(t2.DATED) FROM #t1 AS t2 WHERE t1.player = t2.player)

DROP TABLE #t1
于 2013-09-11T17:22:28.747 に答える
1

これは次の方法で実現できますROW_NUMBER

SELECT Player, Date, Score
FROM
(
    SELECT Player, Date, Score, Rn = ROW_NUMBER() OVER (PARTITION BY Player ORDER BY Date DESC)
    FROM Games
) g
WHERE rn = 1
于 2013-09-11T17:20:49.333 に答える
0

私のコードのフィールドとテーブルをあなたのものに置き換えてください。

;WITH da_CTE AS (
    SELECT
        ROW_NUMBER() OVER ( PARTITION BY da_player ORDER BY da_date DESC ) AS 'RowNumber',
    da_player,
    da_date,
    da_score
   FROM #s
)

SELECT
    da_player,
    da_score
FROM da_CTE
WHERE RowNumber =1
ORDER BY da_player
于 2013-09-11T17:28:14.343 に答える