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

使用GROUP BY与INNER JOIN获取按最大日期筛选的唯一值

SQL Server 获取每组最新行的解决方案

原SQL的问题

你的代码存在语法和逻辑错误:

  • INNER JOIN语法错误:子查询必须用括号包裹,且ON条件的多条件要使用AND连接,不能用逗号
  • GROUP BY位置错误:SQL执行顺序要求GROUP BY必须放在JOIN之后,不能前置
  • 仅通过分组获取最大时间无法拿到该行完整数据,必须关联原表匹配对应记录

推荐方案:窗口函数法

使用ROW_NUMBER()窗口函数,按SalesPerson和Country分组,按Upload_DateTime倒序标记行号,取每组行号为1的记录(即最新行):

SELECT *
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY SalesPerson, Country ORDER BY Upload_DateTime DESC) AS rn
    FROM [dbo].[CommentTable]
) AS temp
WHERE temp.rn = 1;

如果同一SalesPerson+Country组合下有多个相同的最新Upload_DateTime,且需要保留所有这些行,可将ROW_NUMBER()替换为RANK()或DENSE_RANK()。

修正你的GROUP JOIN思路

先通过子查询获取每组的最新时间,再关联原表拿到完整行数据:

SELECT t2.*
FROM (
    SELECT 
        SalesPerson, 
        Country, 
        MAX(Upload_DateTime) AS Latest_Upload_Time
    FROM [dbo].[CommentTable]
    GROUP BY SalesPerson, Country
) AS t1
INNER JOIN [dbo].[CommentTable] AS t2
    ON t1.SalesPerson = t2.SalesPerson
    AND t1.Country = t2.Country
    AND t1.Latest_Upload_Time = t2.Upload_DateTime;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:15:26