sql-server - 加入群组中的最大日期记录

标签 sql-server tsql

Job
--------
Id
Description


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

如何获取所有作业的当前 JobStatus

所以像......

SELECT * FROM Job j
INNER JOIN ( /* Select rows with MAX(Date) grouped by JobId */ ) s
    ON j.Id = s.JobId

(我确信已经有很多类似的问题,但我找不到任何完全符合我需要的问题)。

最佳答案

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

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
        )

这些查询正确处理Date上可能的重复项。

关于sql-server - 加入群组中的最大日期记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4851949/

相关文章:

sql-server - 在 SQL 中连接 2 个表变量

sql-server - 如何使用锁定提示使两个并行查询返回不相交的结果?

sql - 从自定义 T-SQL 函数返回 Varchar

sql - 按 T​​-SQL 中的每 N 条记录分组

sql - 在查询中使用 CTE(公用表表达式)

sql - 只要我们选择正确的连接类型,连接表的顺序就无关紧要吗?

sql-server - SQL Server 和 Excel 认为两个明显相同的字符串不相等

sql-server - 尝试在 Amazon RDS 上启动实例时如何解决错误?

mysql - 将多个参数传递给sql函数

c# - 在C#中将Excel上传到SQL Server时自动添加上传者(用户名或名称)