Job
--------
Id
Description
JobStatus
----------
Id
JobId
StatusTypeId
Date
Run Code Online (Sandbox Code Playgroud)
我如何获得JobStatus所有工作的最新信息?
所以......
SELECT * FROM Job j
INNER JOIN ( /* Select rows with MAX(Date) grouped by JobId */ ) s
ON j.Id = s.JobId
Run Code Online (Sandbox Code Playgroud)
(我确定已经有一堆类似的问题,但我找不到任何我需要的东西).
Qua*_*noi 54
在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
Run Code Online (Sandbox Code Playgroud)
在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
)
Run Code Online (Sandbox Code Playgroud)
这些查询Date正确处理可能的重复项.
一种方法是:
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
Run Code Online (Sandbox Code Playgroud)
假设您在JobStatus中没有2行用于相同的JobId + Date组合
小智 5
SQL Server 2000 的另一个(不是很有效,但易于理解)解决方案:--
SELECT *
FROM job j
WHERE j.date = (SELECT MAX(date)
FROM job
WHERE id = j.id)
Run Code Online (Sandbox Code Playgroud)