我试图在不运行内部查询的情况下完成此查询,但似乎无法正确获取记录。
我有两个表(为了便于阅读,更改了命名约定)...
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表而不是报表中选择?
答案 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'