Выберите записи с самым последним журналом - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь выполнить этот запрос, не выполняя внутренний запрос, но, похоже, не могу правильно получить записи.

У меня есть две таблицы (соглашение об именах изменено для удобства чтения) ...

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 ]

2 голосов
/ 09 марта 2012

Разве вы не можете просто использовать функцию 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'
2 голосов
/ 09 марта 2012
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...