我有一张叫的桌子DimWorkerCode。它有一个名为的列WorkerCode。这是我们的业务关键。可能发生的更改WorkerCode是UnitCode,WindowsID如下。我想忽略WindowsID,只是选择WorkerCode,Unitcode并且StartDate这将是最小的StartDate和EndDate这将是最大的EndDate。
我试过这个查询:
SELECT
WorkerCode, UnitCode,
MIN(StartDate) AS StartDate,
MAX(ISNULL(EndDate, '9999/12/31')) AS EndDate
FROM
dbo.DimWorkerCode
GROUP BY
WorkerCode, UnitCode
问题是您试图提取某些数据而不对其进行分组(min(startdate)的结束日期。
我不确定这是最好的解决方案,但它应该可以工作。使用Row_Number(),我们按min(startdate)和max(enddate)列出记录,而不进行分组;然后您在两个列表的开头处提取记录。
select
WorkerCode,
UnitCode,
StartDate,
EndDate
from
(
select
WorkerCode,
UnitCode,
StartDate,
EndDate
row_number() over (partition by WorkerCode, UnitCode order by StartDate) as MinStartDateRow,
row_number() over (partition by WorkerCode, UnitCode order by EndDate desc) as MaxEndDateRow
from
dbo.DimWorkerCode
) x
where
MinStartDateRow = 1
or MaxEndDateRow = 1
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。