SUM
、COUNT
またはのような集計関数を使用しMAX
、データから他の列も選択する場合は、クエリで使用されている他の列でデータをグループ化する必要があります。
したがって、次のように書く必要があります。
WITH QResult AS
(SELECT
ROW_NUMBER() OVER (ORDER BY Ad_Date DESC) AS Row,
*
FROM [vw_ads]
)
SELECT Co1l, Col2, MAX(Row)
FROM QResult
GROUP BY Col1, Col2
これは、必要な列を明示的に綴る必要があることも意味します - いずれにせよ良い考えです。句*
では使用できません。GROUP BY
更新:あなたのコメントに基づいて、私はあなたが本当に欲しいものは次のようなものだと思います:
(更新 #2 を参照してください - マーティン・スミスの提案は私の元のアイデアよりも優れています ここ)
WITH QResult AS
(SELECT
ROW_NUMBER() OVER (ORDER BY Ad_Date DESC) AS Row,
*
FROM [vw_ads]
)
SELECT
Co1l, Col2,
MaxRow = (SELECT MAX(Row) FROM QResult)
FROM QResult
Row
これにより、結果セットの各行について、同じ値である CTEの最大値が得られます。
更新 #2: Martin Smith の提案は次のようになります。
WITH QResult AS
(SELECT
ROW_NUMBER() OVER (ORDER BY Ad_Date DESC) AS Row,
*
FROM [vw_ads]
)
SELECT
Co1l, Col2,
MAX(Row) OVER()
FROM QResult
もちろん、これも機能します。私のソリューションよりもさらに効率的です。ありがとう、マーティン!