Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Вземете последната дата преди стойността на датата в реда

Можете да използвате OUTER APPLY . Това е като корелирана подзаявка, но позволява множество колони:

SELECT  p.ID, 
        p.Patient,
        p.ProcedureType,
        p.ProcedureDate,
        [LastExamDate] = exam.ProcedureDate, 
        [DaysSinceLastExam] = DATEDIFF(DAY, exam.ProcedureDate, p.ProcedureDate),
        [LastExamType] = exam.ProcedureType 
FROM    Procedures p
        OUTER APPLY
        (   SELECT  TOP 1 exams.ProcedureType, exams.ProcedureDate
            FROM    Procedures exams
            WHERE   Exams.ProcedureType LIKE '%Exam%'
            AND     Exams.Patient = p.Patient
            AND     Exams.ProcedureDate <= p.ProcedureDate
            ORDER BY Exams.ProcedureDate DESC
        ) exam;

Пример за SQL Fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Начини за коригиране на SQL Server, открил I/O грешка, базирана на логическа последователност

  2. Частична сума между различни записи с помощта на SQL 2008

  3. Как работи EXCEPT в SQL Server

  4. Пъзел с безизходица:Жертвата не притежава никакъв ресурс, използван за убийство за разрешаване на безизходица

  5. Как да коригирате „В списъка за избор може да бъде посочен само един израз…“ в SQL Server