tsql - 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 上分组, 有时代码是相同的,但客户端代码不同,所以我想会有多个记录。
肯定我在查询中犯了一些错误,我没有得到正确的输出。所以请有人帮我纠正代码。
谢谢
解决方案
问题解决了。
;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
推荐阅读
- r - 连续字符值和时间大于指定间隔的情况
- parsing - 语法检查校对工具(插件、宏或你有什么)处理(一劳永逸)荷兰语 Word 文档中所谓的“dt-errors”
- mysql - 在 Sequelize(MySQL) 中,如何使用多个事务?
- python - 我将如何验证用户输入的密码与哈希密码表单数据库相同
- excel - 为什么保存共享文件时会创建重复的excel文件
- laravel - 我需要在 Laravel 中为数据库中已经存在的表创建迁移吗?
- python - 使用 tox 和 Github Action 访问环境变量
- file - System.Net.Http,版本=4.2.0.0 冲突
- powerbi - PowerBI:一张地图中的两个过滤位置集
- javascript - 未捕获的 ReferenceError:未定义常量