У меня есть следующие таблицы (это сокращенно)
tableAssignments
id
timestamp // updated when row is modified
tableSystems
tableUsers
...
tableAssignmentsSnapshot
id
timestamp // set when row created, snapshots never change
tableSystemsSnapshot
tableUsersSnapshot
tableAssignments_id // reference to "tableAssignments" row this was created from
syncKey // Changed when snapshots are created, max value is latest
Через некоторое время после изменения табличных назначений делаются снимки всех назначений, и моментальные снимки создаются с тем же syncKey. Я пытаюсь написать запрос, чтобы проверить, являются ли последние "tableAssignmentsSnapshot" актуальными или новые должны быть приняты. Необходимая логика:
Определите последние таблицыAssignmentSnapshots для каждой системы, которые определяются максимальным значением syncKey (см. Запрос ниже).
Соедините результат из # 1 с таблицей назначений.
- Если временная метка из tableAssignments> timestamp из tableAssignmentsSnapshot, требуется новый моментальный снимок.
Следующий запрос выполняет шаг # 1 и выполняется быстро. Он возвращает tableAssignmentSnapshots с наибольшим значением syncKey для каждой системы.
select * from
tableAssignmentsSnapshot d inner join tableSystemsSnapshot e
on d.systemId = e.id
where d.syncKey = (select MAX(syncKey) from tableAssignmentsSnapshot y inner join tableSystemsSnapshot z
on y.systemId = z.id
where tableSystems_id = e.tableSystems_id)
Я борюсь с тем, что делать дальше. Мне нужно иметь возможность сделать что-то вроде следующего, но у меня проблемы с синтаксисом требуется:
select * from tableAssignments a right outer join
(
the result from above query
)
on a.id = ?.tableAssignments_id