富仓 发表于 2023-9-14 12:10:24

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]
查看完整版本: SQL查询-联接返回联接表的前两个记录