You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server查询中获取每个玩家的最大(最新)日期

如何在查询中为每个玩家获取最大日期(最新日期)?

嘿,我看你需要在现有动态SQL的基础上,实现每个玩家仅保留最新创建日期的记录,结合你的数据表结构和现有代码,我给你整理了可行的修改方案:

核心实现思路

要筛选每个玩家的最新记录,最直接的方式是用窗口函数分区排序:给每个玩家的记录按PlayerId分组(分区),然后按DateCreated倒序排号,这样每个玩家组里排在第一的就是最新的那条记录,我们只要保留行号为1的即可。

修改后的完整SQL代码

IF (@pageNumber IS NOT NULL AND @pageSize IS NOT NULL)
BEGIN
    SET @minNumber = (@pageNumber - 1) * @pageSize;
    SET @maxNumber = @pageNumber * @pageSize;
    SET @sql = @sql + ' TOP(@maxNumber) ROW_NUMBER () OVER (ORDER BY ' + @orderBy +') AS [RowNumber], ';
END
ELSE
    SET @sql = @sql + ' ROW_NUMBER () OVER (ORDER BY ' + @orderBy + ') AS [RowNumber], ';

SET @sql = @sql + ' COUNT(*) OVER () AS [RecordCount],* 
FROM (
    -- 先过滤出每个玩家的最新记录
    SELECT [PlayerId], [Username], [DateCreated], [Response]
    FROM (
        SELECT 
            [PlayerId], [Username], [DateCreated], [Response],
            -- 按玩家分区,创建日期倒序排号,最新的记录行号为1
            ROW_NUMBER() OVER(PARTITION BY PlayerId ORDER BY DateCreated DESC) AS PlayerRowNum
        FROM TABLE with (nolock)
    ) AS PlayerLatestRecords
    WHERE PlayerLatestRecords.PlayerRowNum = 1
) AS FilteredLatestData';

关键改动说明

  • 新增了内层子查询PlayerLatestRecords:在这里给每个玩家的记录生成专属行号,最新的记录因为倒序排序,行号会是1。
  • 中间层FilteredLatestData:只保留行号为1的记录,确保每个玩家只有一条最新的记录进入后续的分页逻辑。
  • 你原来的分页、行号计数逻辑完全保留,只是数据源换成了已经筛选好的最新记录集合,不影响原有功能。

这样执行后,就能得到你想要的结果:player1和player2各一条最新创建日期的记录,同时还能正常支持分页功能。

内容的提问来源于stack exchange,提问作者user2171512

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:54:43