SQL查询-联接返回联接表的前两个记录
我有两个表:病人
pkPatientId
名
姓患者状态
pkPatientStatusId
fkPatientId
状态码
开始日期
结束日期病人 -> PatientStatus 是一对多的关系。
我想知道是否有可能。SQL连接,以便只返回每个病人的前两个PatientStatus如果只有一个记录。PatientStatus记录不得在结果中返回。
我查询的普通联系是:
SELECT FROM Patient p INNER JOIN PatientStatus ps ON p.pkPatientId = ps.fkPatientIdORDER BY ps.fkPatientId,ps.StartDate
解决方案:
假如你用的是SQL Server 2005或更高版本,所以CTE这可能是最好的选择,但如果你想与其他平台更兼容,你应该能够工作:
SELECT P.pkPatientID, P.FirstName, P.LastName, PS1.StatusCode AS FirstStatusCode, PS1.StartDate AS FirstStatusStartDate, PS1.EndDate AS FirstStatusEndDate, PS2.StatusCode AS SecondStatusCode, PS2.StartDate AS SecondStatusStartDate, PS2.EndDate AS SecondStatusEndDateFROM Patient PINNER JOIN PatientStatus PS1 ON PS1.fkPatientID = P.pkPatientIDINNER JOIN PatientStatus PS2 ON PS2.fkPatientID = P.pkPatientID AND PS2.StartDate > PS1.StartDateLEFT OUTER JOIN PatientStatus PS3 ON PS3.fkPatientID = P.pkPatientID AND PS3.StartDatePS1.StartDate AND PS4.StartDate 对我来说,你想要前两种状态而不是后两种状态真的很奇怪,但我假设你知道你想要什么。
如果性能更好,也可以使用WHERE NOT EXISTS代替PS3和PS4连接。
页:
[1]