Joining to MAX date record in group

前端 未结 3 1740
耶瑟儿~
耶瑟儿~ 2020-12-14 06:06
Job
--------
Id
Description


JobStatus
----------
Id
JobId
StatusTypeId
Date

How do I get the current JobStatus for all jobs?

相关标签:
3条回答
  • 2020-12-14 06:50

    Another (not very efficient, but easy to understand) solution for SQL Server 2000:--

    SELECT  *
    FROM    job j
    WHERE   j.date = (SELECT MAX(date) 
                      FROM   job 
                      WHERE  id = j.id)
    
    0 讨论(0)
  • 2020-12-14 06:55

    In SQL Server 2005+:

    SELECT  *
    FROM    job j
    OUTER APPLY
            (
            SELECT  TOP 1 *
            FROM    jobstatus js
            WHERE   js.jobid = j.jobid
            ORDER BY
                    js.date DESC
            ) js
    

    In SQL Server 2000:

    SELECT  *
    FROM    job j
    LEFT JOIN
            jobstatus js
    ON      js.id =
            (
            SELECT  TOP 1 id
            FROM    jobstatus jsi
            WHERE   jsi.jobid = j.jobid
            ORDER BY
                    jsi.date DESC
            )
    

    These queries handle possible duplicates on Date correctly.

    0 讨论(0)
  • 2020-12-14 06:59

    One way is this:

    SELECT j.*, s2.StatusTypeId, s2.Date
    FROM Job j
        JOIN
        (
            SELECT JobId, MAX(Date) AS LatestStatusDate
            FROM JobStatus 
            GROUP BY JobId
        ) s1 ON j.JobId = s1.JobId
        JOIN JobStatus s2 ON s1.JobId = s2.JobId AND s1.LatestStatusDate = s2.Date
    

    Assuming you won't have 2 rows in JobStatus for the same JobId + Date combination

    0 讨论(0)
提交回复
热议问题