我正在寻找一个SQL查询来查找父记录值以及其多个子记录中的最新日期时间值。我设想在join子句中使用SELECT TOP 1的解决方案,但我有点难过如何做到这一点。
以下是简化版。我已经寻求了这方面的帮助,但由于父记录和子记录存储在同一个表中,但是使用另一个表来链接它们,我很难找到问题的答案。
我有一个 [Case] 表,用于存储两种类型的真实事件的数据:引荐和访问。
一个推介与多次访问相关联。
将它们“链接”在一起的数据存储在名为 EventCaseAutoCreate
的表中Case table (Referrals and Visits)
------------------------
CaseNo uniqueidentifier,
ActiveDate datetime,
CaseType varchar (Visit or Referral)
EventCaseAutoCreate table
------------------------
EventCaseAutoCreateRef uniqueidentifier,
CaseNo (Visit [case] table caseref value)
OriginalCaseNo (Referral [case] table caseref value)
因为Case表包含Referral和Visit行,[case] .activedate是'Referral Date'或'Visit Date',具体取决于CaseType。
所以你有以下内容:
Case
CaseNo ActiveDate CaseType
10000 01/07/2014 Referral
10001 02/07/2014 Visit
10005 05/07/2014 Referral
10002 07/07/2014 Visit
10003 08/07/2014 Visit
10004 20/07/2014 Visit
10006 06/07/2014 Visit
和
EventCaseAutoCreate
EventCaseAutoCreateRef CaseNo OriginalCaseNo
GUID 10001 10000
GUID 10002 10000
GUID 10003 10000
GUID 10004 10000
GUID 10006 10005
我想知道查询以获得以下结果:
ReferralCaseNo ReferralDate LatestVisitDate
10000 01/07/2014 20/07/2014
10005 05/07/2014 06/07/2014
我正在使用SQL Server 2005.非常感谢。
答案 0 :(得分:2)
这是我的抨击:
select a.caseno as ReferralCaseNo, c1.ActiveDate as ReferralDate, b.maxdate as LatestVisitDate
from cases c1 inner join
(
select distinct e.originalcaseno as caseno
from cases c inner join events e on c.caseno = e.caseno
)a on c1.caseno = a.caseno
inner join
(
select max(ActiveDate) as maxdate, e2.originalcaseno
from cases c2 inner join events e2
on c2.caseno = e2.caseno
group by e2.originalcaseno
) b on a.caseno = b.originalcaseno
答案 1 :(得分:1)
我认为您只需在EventCaseAuteCreate
表中查找原始案例编号,然后进行条件汇总:
select OriginalCaseNo as ReferralCaseNo,
min(case when casetype = 'Referral' then ActiveDate end) as ReferralDate,
max(case when casetype = 'Visit' then ActiveDate end) as LatestVisitDate
from cases c join
EventCaseAutoCreate eac
on c.caseno = eac.caseno or
c.caseno = eac.OriginalCaseNo
group by eac.OriginalCaseNo;