У меня есть таблица SQL со следующей структурой:SQL Найти предыдущее значение для каждой строки
id Integer, (represents a userId)
version Integer,
attribute varchar(50)
Так некоторые примеры строк являются:
4, 1, 'test1'
4, 2, 'test2'
4, 3, 'test3'
мне нужно сгенерировать вывод в следующем формате:
4, 1, 'test1', 'test1'
4, 2, 'test2', 'test1'
4, 3, 'test3', 'test2'
Так формат моего выхода будет:
id Integer,
version Integer,
attribute_current varchar,
attribute_old varchar
Я уже пробовал следующее:
select versionTest.id, versionTest.version, versionTest.attribute, maxVersionTest.attribute
from versionTest
inner join
versionTest maxVersionTest
ON
versionTest.id = versionTest.id
AND
versionTest.version =
(Select max(version) currentMaxVersion
from versionTest maxRow
where maxRow.id = id);
выше запрос выполняется, но возвращает неверные результаты. Он возвращает только самую большую версию вместо того, чтобы возвращать строки для всех версий.
Любые идеи о том, как я должен исправить свой запрос для получения правильных результатов? Благодаря!
Примечание. Номера версий не гарантируются последовательностью, начиная с 1. Моя фактическая база данных имеет некоторые необычные номера версий (т.е. пользователь 7 имеет версии 3 и 15 без версий 4, 5, 6 и т. Д.). ,
Это будет работать, если OP запрашивает для одного ID – Andomar
Но может быть легко адаптирован для работы с несколькими идентификаторами – Strawberry
@Andomar права. –