首页 > 解决方案 > 选择每个 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

任何帮助将非常感激。谢谢。

标签: sqlsql-server

解决方案


在 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)


推荐阅读