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 に答える