sql >> Databasteknik >  >> RDS >> Sqlserver

Få senaste datum före datum värde i rad

Du kan använda YTTRE APPLY . Det är som en korrelerad underfråga men tillåter flera kolumner:

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;

Exempel på SQL Fiddle



  1. uppdatera trigger för att uppdatera poster i en annan tabell

  2. Slumpmässig post från en databastabell (T-SQL)

  3. Postgres - Returnera fel vid uppdatering om posten inte hittas

  4. Långsamt BESTÄLL AV i stort bord