如何返回按Job和TC Code取最大请求日期的动态数据表
解决Job+TC Code组合取最新请求记录的问题
你之前用窗口函数的思路没问题,核心问题出在分区条件上——只按TC Code分区的话,会把不同Job下的同一个TC Code混在一起计算,没法满足「每个Job下的唯一TC Code」这个需求。我们只需要把Job和TC Code的组合作为分区依据,就能精准拿到每个Job里每个TC Code的最新记录。
修正后的SQL代码如下:
select [Job], [Description], [TC Code], [Units], [Date Requested], [Requestor] from ( Select [Job], [Description], [TC Code], [Units], [Date Requested], [Requestor], -- 按Job+TC Code的唯一组合分区,确保每个Job下的TC Code独立排序 row_number() over(partition by [Job], [TC Code] order by [Date Requested] desc) as rn from [dbo].['VAR ADJ Log$'] ) as t where rn = 1 -- 可选:按Job和TC Code排序,让结果和示例格式更匹配 order by [Job], [TC Code]
代码说明:
partition by [Job], [TC Code]:将数据拆分为「Job+TC Code」的独立分组,比如Job17+Days、Job17+Crew、Job20+Days这些都是单独的计算单元order by [Date Requested] desc:每个分组内按请求日期倒序排列,最新的记录会被标记为rn=1- 外层筛选
rn=1,就能得到每个Job+TC Code组合的最新完整记录
用你提供的示例数据测试,这个查询会完全匹配你期望的结果:每个Job下所有唯一TC Code的最新请求记录都会被返回,包括Job17新增的Con类型和更新后的Crew类型记录。
内容的提问来源于stack exchange,提问作者Joey B
相关产品推荐
相关产品推荐

