2

我有一张这样的桌子:

在此处输入图像描述

期望的结果是:

在此处输入图像描述

这是解释:

结果应该只选择具有不同列 UserName、RemarkID、CreatedBy 和 CreatedDate 的最大 ActivityCount 列

我尝试使用 groupby 但出现错误

Column 'ActivityCount' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

这是使用 group by 的 SQL 脚本

select * from TableName group by UserName, RemarkID, CreatedBy, CreatedDate

需要对脚本进行哪些更改才能获得所需的结果?

4

2 回答 2

4

尝试这个:

SELECT UserName, RemarkID, CreatedBy, CreatedDate, MAX(ActivityCount)
FROM TableName
GROUP BY UserName, RemarkID, CreatedBy, CreatedDate
于 2013-11-06T09:15:04.063 回答
3

最简单的方法是使用ROW_NUMBER和 CTE:

WITH CTE AS
(
    SELECT t.*,
       RN = ROW_NUMBER() OVER (PARTITION BY UserName, RemarkID, CreatedBy, CreatedDate
                               ORDER BY ActivityCount DESC)
    FROM dbo.TableName t 
)
SELECT * FROM CTE WHERE RN = 1

如果您想查看ActivityCount每组最高的所有记录(如果有多个),您可以使用DENSE_RANK而不是ROW_NUMBER.

排名功能

于 2013-11-06T09:13:15.060 回答