SQL query - Join that returns the first two records of joining table

后端 未结 8 1878
陌清茗
陌清茗 2021-02-02 03:50

I have two tables:

Patient

  • pkPatientId
  • FirstName
  • Surname

PatientStatus

  • pk
8条回答
  •  暗喜
    暗喜 (楼主)
    2021-02-02 03:53

    Here is my attempt - It should work on SQL Server 2005 and SQL Server 2008 (Tested on SQL Server 2008) owing to the use of a common table expression:

    WITH CTE AS
    (
        SELECT  fkPatientId
              , StatusCode
              -- add more columns here
              , ROW_NUMBER() OVER
        (
        PARTITION BY fkPatientId ORDER BY fkPatientId desc) AS [Row_Number] 
        from PatientStatus
        where fkPatientId in
        (
            select fkPatientId
            from PatientStatus
            group by fkPatientId
            having COUNT(*) >= 2
        )
    )
    SELECT p.pkPatientId,
        p.FirstName,
        CTE.StatusCode  
    FROM [Patient] as p
        INNER JOIN CTE
            ON p.[pkPatientId] = CTE.fkPatientId
    WHERE CTE.[Row_Number] = 1 
    or CTE.[Row_Number] = 2
    

提交回复
热议问题