sql - 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
解决方案
您可以使用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;
推荐阅读
- c - 将字符串与 C 中的结构成员进行比较
- netty - Netty http/2 编解码器的 ReadTimeoutHandler
- wpf - 实现为 CustomControl 的 WPF 窗口在设计时不应用模板
- javascript - 不和谐.js | 从成员中删除角色并将该角色赋予另一个成员
- javascript - 如何使用文字对象中的键创建变量,javascript
- javascript - 如何动态生成日期选择器引导日期禁用
- ios - Swift 中的“in”是什么意思?
- deno - 使用 Deno 的 Oak 包显示 base64 图像
- python - 即使用户通过保持图表处于相同状态而在表格中的单元格上选择了一个单元格,也刷新破折号数据表?
- python - 在特殊情况下,Python 的 try 和 except 块似乎都被评估