首页 > 解决方案 > SQL Server:查找公司/部门 ID 的最新生效日期

问题描述

我们有一个DeptID表,每个公司/部门 ID/操作有多个记录。无论采取何种行动,我如何才能提取仅包含公司/部门 ID 的最新生效日期的列表?我想在查询的记录中显示这些列和其他一些列。

 Co#   DeptID  Action  Eff Date
 ---   ------  ------  --------
 01    12      Closed  03/22/2018 
 01    24      Closed  03/03/2014 
 01    24      Open    07/01/2010
 01    365     Closed  01/01/2008
 01    365     Open    05/01/2010

此 SQL 很接近,但我无法让它仅列出该操作的最后生效日期。如果我删除该操作,那么它将列出公司/部门 ID 的最后生效日期,但我需要知道它适用于哪个操作 - 打开还是关闭?

select distinct 
    loc.CompanyNumber, loc.DeptID, loc.Action, 
    max(loc.effdate) over (partition by companynumber, deptid) as LocmaxDate
from 
    [dbo].[LocationsOpenClosed] as loc

标签: sqlsql-serversql-server-2008

解决方案


您可以使用subquery

select loc.*
from [dbo].[LocationsOpenClosed] as loc
where effdate = (select max(loc1.effdate) 
                 from [dbo].[LocationsOpenClosed] as loc1
                 where loc1.companynumber = loc.companynumber 
                       loc1.deptid = loc.deptid
                 );

但是,我也建议使用排名功能:

select *
from (select *, 
             row_number() over (partition by companynumber, deptid order by effdate desc) as seq
      from [dbo].[LocationsOpenClosed]
     ) loc
where seq = 1;

推荐阅读