SQL Server如何实现按Ticker、ClientCode分组后每组返回1条记录
问题原因
你当前查询仅返回1条记录的核心原因是语句中使用了TOP 1关键字,该关键字会强制截断结果集,仅保留排序后的第一条记录,和你写的分组逻辑没有关联。
修正代码
如果你需要获取所有Ticker + ClientCode分组对应的统计结果,直接移除TOP 1即可,修正后的查询代码如下:
SELECT Ticker, ClientCode, MAX(Earnings) Earnings, MAX(PrePost) AS PrePost, MAX(LastCSMDeliveredDate) as LastCSMDeliveredDate FROM test GROUP BY Ticker,ClientCode ORDER BY Ticker,LastCSMDeliveredDate DESC
上述代码执行后会返回5条分组结果,正好对应测试数据里的5组不同Ticker+ClientCode组合。
如果你的实际需求是每个Ticker仅保留一条最新的记录,可使用窗口函数实现,参考代码如下:
WITH Tmp AS ( SELECT Ticker, ClientCode, Earnings, PrePost, LastCSMDeliveredDate, ROW_NUMBER() OVER(PARTITION BY Ticker ORDER BY LastCSMDeliveredDate DESC) AS rn FROM test ) SELECT Ticker,ClientCode,Earnings,PrePost,LastCSMDeliveredDate FROM Tmp WHERE rn=1
内容的提问来源于stack exchange,提问作者Babu Goel
相关产品推荐
相关产品推荐

