Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中实现这一点?_Sql_Sql Server - Fatal编程技术网

如何在SQL中实现这一点?

如何在SQL中实现这一点?,sql,sql-server,Sql,Sql Server,如果我有一个名为“分数”的表格,如下所示: 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 如何查询每位球员的最新分数?要生成这样的结果集,请执行以下操作: PLAYER DATE SCO

如果我有一个名为“分数”的表格,如下所示:

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
如何查询每位球员的最新分数?要生成这样的结果集,请执行以下操作:

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

这可以通过
行编号
实现:

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

以下SQL在给定用户名在给定日期只能有一个条目的情况下工作

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

将我的代码中的字段和表替换为您的

;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

请展示您的工作。我的建议是查看窗口函数,如
row\u number()
,或聚合函数,如
max()
。非常简单的解决方案,非常好!