选择具有最新日志的记录

时间:2012-03-08 20:36:30

标签: sql sql-server-2008

我试图在不运行内部查询的情况下完成此查询,但似乎无法正确获取记录。

我有两个表(为了便于阅读,更改了命名约定)...

report
    report_id
    name

report_status_log
   report_id
   code
   timestamp

报告可以包含多个状态日志。我正在尝试获取所有报告,其中最新的report_status_log等于某个代码。

这不起作用......

select report.id
       inner join report_status_log on report.report_id = report_status_log.report_id
where  report_status_log.code = 'finished'

...因为尽管'已完成'可能在状态日志中,但它不一定总是最新的日志记录。

有办法做到这一点吗?或者我应该从report_status_log表而不是报表中选择?

2 个答案:

答案 0 :(得分:2)

with cte as (
  select *, 
    row_number() over (partition by report_id order by timestamp desc) as RowNum
  from report_status_log
)

select * 
from report r
inner join cte c
on r.report_id = c.report_id
where c.code = 'finished' and RowNum = 1

答案 1 :(得分:2)

难道你不能只使用时间戳上的max函数来获取最新的日志吗?

select report_id
from report
inner join report_status_log on report.report_id = report_status_log.report_id
where timestamp = (SELECT MAX(timestamp) FROM report_status_log)
and report_status_log.code = 'finished'