我有三个关注的表和一个从它们生成以下输出的查询,其中每个字段前面都有一个代表原始表的字母,用于演示目的。相反,我想要的是一份只有最新数据的报告,即我只想要使用 MAX(EntryDate) 返回的行,但我不知道如何实现这一点。我已经尝试过HAVING
,聚合等,但没有成功。要么我的方法是错误的,要么我在语法上遗漏了一些东西。
s.ID r.FirstID m.ID m.PartNum m.Revision r.EntryDate
26 42 13 NULL A 2012-03-25 15:32:00
26 42 17 820044444 B 2012-03-27 09:48:00
26 42 14 820056789 C 2012-03-28 12:19:00
期望的结果:
s.ID r.FirstID m.ID m.PartNum m.Revision r.EntryDate
26 42 14 820056789 C 2012-03-28 12:19:00
对于一些额外的背景,r.FirstID 表示一组彼此相关的记录,因此对于每个分组,我希望只返回具有最新数据的记录。
这是我到目前为止的查询:
select s.ID,r.FirstID,m.ID,m.PartNum,m.Revision,r.EntryDate from StatusLog s
left join (select FirstID,PartInfoID from Request where PartInfoID is not null group by FirstID,PartInfoID) r on s.FirstID= r.FirstID
--required filtering here? Or move this extra join to the inner query?
left join PartInfo m on r.PartInfoID = m.ID
我正在为我的 DBMS 使用 SQL Server。