Job
--------
Id
Description
JobStatus
----------
Id
JobId
StatusTypeId
Date
How do I get the current JobStatus
for all jobs?
so something like....
SELECT * FROM Job j
INNER JOIN ( /* Select rows with MAX(Date) grouped by JobId */ ) s
ON j.Id = s.JobId
(I'm sure there are a bunch of similar questions already but I couldn't find anything which exactly does what I need).
How can I get max date and minimum date in SQL? The SQL MIN() and MAX() Functions The MIN() function returns the smallest value of the selected column. The MAX() function returns the largest value of the selected column.
The maximum number of tables that can be referenced in a single join is 61.
The join operation is used to combine related rows from two tables into a result set. Join is a binary operation. More than two tables can be combined using multiple join operations.
In Tableau, we can join a maximum of 32 tables.
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
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With