Job
--------
Id
Description
JobStatus
----------
Id
JobId
StatusTypeId
Date
How do I get the current JobStatus
for all jobs?
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)
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.
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