当使用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 - Martin Smith 的建议甚至比我最初的想法更好)
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:马丁史密斯的建议是这样的:
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
当然,这也有效 - 甚至比我的解决方案更有效。谢谢,马丁!