значение поля предыдущей строки аксесс, запрос SQL (без VBA)

Сергей Лалов
Дата: 14.01.2016 18:56:12
Коллеги, всем привет!

Возник затуп с простым вопросом , как при помощи одного SQL реализовать запрос ,в котором в дополнительном расчетном поле будет выводиться значение поля предыдущей строки.

Есть к примеру таблица ДОХОДЫ, с двумя полями ПЕРИОД (текст) и ДОХОД (обычное число)

Как написать правильно запрос таким образом, чтобы дополнительное поле в запросе выводило значение поля ДОХОД предыдущей записи?

В VBA не надо . Пример где снимается значение с привязкой к к значению счетчика также не надо. Нужно именно предыдущей строки.
sdku
Дата: 14.01.2016 20:40:25
Сергей Лалов
....Как написать правильно запрос таким образом, чтобы дополнительное поле в запросе выводило значение поля ДОХОД предыдущей записи?....
А относительно какой?
seregA_lalov@mail.ru
Дата: 14.01.2016 21:31:22
sdku,

Относительно recordset.moveLast ;)
Akina
Дата: 15.01.2016 09:08:55
Сергей Лалов
как при помощи одного SQL реализовать запрос ,в котором в дополнительном расчетном поле будет выводиться значение поля предыдущей строки.

Для этого обязано существовать идентифицирующее (уникальное в пределах группы сортировки) поле, для которого определена операция сравнения. Суть запроса элементарна. Берётся две копии таблицы, выполняется отбор по этому идентифицирующему полю так, чтобы во второй копии оно было меньше, чем в первой. Группируем по полю первой копии и берём максимум по второй копии. Получаем пару идентифицирующих значений. Привязывая к ним ещё две копии таблицы, получаем полные записи.
Сергей Лалов
Дата: 15.01.2016 16:32:17
Akina
Для этого обязано существовать идентифицирующее (уникальное в пределах группы сортировки) поле, для которого определена операция сравнения. Суть запроса элементарна. Берётся две копии таблицы, выполняется отбор по этому идентифицирующему полю так, чтобы во второй копии оно было меньше, чем в первой. Группируем по полю первой копии и берём максимум по второй копии. Получаем пару идентифицирующих значений. Привязывая к ним ещё две копии таблицы, получаем полные записи.


Большое спасибо за методику подхода. А можете показать текст запроса на уровне моих полей в таблице?
Akina
Дата: 15.01.2016 17:17:36
Пользуясь методикой, составьте запрос самостоятельно. Причём не весь сразу, а пишите фрагменты по шагам, постепенно наращивая текст запроса. Результат работы (не конечный, а именно по шагам с пояснениями) - выкладывайте. Если в нём будут ошибки - я покажу где и объясню как и почему.
Сергей Лалов
Дата: 15.01.2016 20:37:42
Akina
Пользуясь методикой, составьте запрос самостоятельно. Причём не весь сразу, а пишите фрагменты по шагам, постепенно наращивая текст запроса. Результат работы (не конечный, а именно по шагам с пояснениями) - выкладывайте. Если в нём будут ошибки - я покажу где и объясню как и почему.


В общем то получается запрос вида:

SELECT доходы.счетчик, доходы.доход, доходы.период,(SELECT TOP 1 доходы2.доход FROM доходы AS доходы2 
WHERE  доходы2.период <доходы.период ORDER BY  доходы2.период DESC) AS предыдущее_значение
FROM доходы ORDER BY доходы.период


Каюсь, что нашел алгоритм в шпаргалке, на этом сайте. Но разобрался. Ключевым моментом здесь является именно сортировка основной таблицы и её копии в разных направлениях с выборкой первой записи из копии, отсортированной в обратном порядке.