首页 > 解决方案 > SQL Server:如何从每个组中返回一个记录

问题描述

我面临一个问题。所以在这里我给出我的代码。请查看示例数据并选择未给出预期结果的查询。

CREATE TABLE [dbo].[Test](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Ticker] [varchar](20) NULL,
    [ClientCode] [varchar](20) NULL,
    [Earnings] [varchar](20) NULL,
    [PrePost] [varchar](20) NULL,
    [LastCSMDeliveredDate] [datetime] NULL
) ON [PRIMARY]
GO

Insert into Test(Ticker,ClientCode,Earnings,PrePost,LastCSMDeliveredDate)
values('ABB','ABB','3Q2021','Pre',GetDate()-5),
('ABB','ADS','2Q2021','Pre',GetDate()-10),
('ABB','ABB','2Q2021','Pre',GetDate()-12),

('ANTM','IVZ','3Q2021','Pre',GetDate()-5),
('ANTM','IVZ','2Q2021','Pre',GetDate()-11),
('ANTM','IVZ','3Q2021','Pre',GetDate()-15),

('CSGP','IVZ','3Q2021','Pre',GetDate()-5),
('CSGP','DG','2Q2021','Pre',GetDate()-12),
('CSGP','IVZ','3Q2021','Pre',GetDate()-20)

Select * from test
select top 1 Ticker,ClientCode,Max(Earnings) Earnings,Max(PrePost) AS 
PrePost,Max(LastCSMDeliveredDate) as LastCSMDeliveredDate from test
Group BY Ticker,ClientCode
Order BY Ticker,LastCSMDeliveredDate DESC

上面的选择只返回单个记录,但我已经在 Ticker,ClientCode 上分组, 有时代码是相同的,但客户端代码不同,所以我想会有多个记录。

肯定我在查询中犯了一些错误,我没有得到正确的输出。所以请有人帮我纠正代码。

谢谢

标签: tsql

解决方案


问题解决了。

;WITH cte AS
(
   SELECT *,
         ROW_NUMBER() OVER (PARTITION BY Ticker,ClientCode ORDER BY LastCSMDeliveredDate DESC) AS rn
   FROM test
)
SELECT *
FROM cte
WHERE rn = 1

推荐阅读