sql - 选择每个 ID 和部门代码的最新状态
问题描述
我有下表:
我想获取 CL_ID 具有的每个 dept_code 的最新状态。所以想要的输出是这样的:
我尝试了以下方法,但这只是为我提供了每个客户的最新状态,而不是他们的每个 dept_codes。
SELECT *
FROM [CIMSHR6_MERGED].[dbo].[C3CLSTAT] C
INNER JOIN
(SELECT CLIENT_NUMBER, MAX(STATUS_DATE) AS SDATE
FROM [CIMSHR6_MERGED].[dbo].[C3CLSTAT]
GROUP BY CLIENT_NUMBER) X
ON X.CLIENT_NUMBER = C.CLIENT_NUMBER
AND X.SDATE = C.STATUS_DATE
ORDER BY C.CLIENT_NUMBER
任何帮助将非常感激。谢谢。
解决方案
在 SQL Server 中工作的一种便捷方法是:
select top (1) cl.*
from [CIMSHR6_MERGED].[dbo].[C3CLSTAT] cl
order by row_number() over (partition by cl_id, dept_code order by status_date desc);
在几乎任何数据库中使用正确索引的有效方法是:
select cl.*
from [CIMSHR6_MERGED].[dbo].[C3CLSTAT] cl
where cl.status_date = (select max(cl2.status_date)
from [CIMSHR6_MERGED].[dbo].[C3CLSTAT] cl2
where cl2.cl_id = cl.cl_id and cl2.dept_code = cl.dept_code
);
正确的索引是 on (cl_id, dept_code, status_date)
。
推荐阅读
- javascript - 将 javascript 代码添加到 Wordpress 中的侧边栏小部件区域
- python - 使用 for 循环创建字典,而不是将其转换为带有索引的数据框
- css - 带有无效边框颜色的边框如何工作?
- arduino - BLE CSC 服务并不总是被检测到 - 正确设置?
- reactjs - 修复 React JS 上的编辑功能很热门?
- c# - C# 中的隐式类型转换
- android - java.lang.RuntimeException:从@HiltAndroidTest 生成的 Hilt 类丢失
- android - 我已经从平台工具中删除了 adb 文件
- javascript - 如何为特定国家/地区运行 JavaScript 文件?
- python - 如何安排 python 电报机器人在特定时间/之后发送消息?