Форум программистов, компьютерный форум, киберфорум
Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 2

Обращение к предыдущей записи в таблице

15.07.2013, 19:27. Показов 2335. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Есть бд со следующими таблицами:
Кликните здесь для просмотра всего текста
Customer - справочник клиентов
CustID: Уникальный идентификатор клиента
CustName: Название клиента
Accounts: - Справочник счетов клиентов
AccountID: Уникальный идентификатор счета
CustId: Уникальный идентификатор клиента
Account: Номер счета
Rests: Остатки по счетам за даты (Если за дату остаток не менялся – то запись отсутствует)
CustID: Уникальный идентификатор клиента
AccountID: Уникальный идентификатор счета
Date: Дата остатка
Rest: - Исходящий остаток на дату (Кредитовый – ‘+’ – Дебетовый –‘-’)
Document: Документы
DocID: Уникальный идентификатор документа
Narrative: Наименование
DocDetails: - Детали документов
DocID: Уникальный идентификатор документа
CustID: Уникальный идентификатор клиента
AccountID: Уникальный идентификатор счета
Date: Дата операции
DebitCredit: признак - Дебет/Кредит (‘D’ – Дебет – ‘C’ – Кредит)
Sum: Сумма

Задача стоит следующая: нужно вывести всех клиентов, у которых входящий остаток не совпадает с операциями за день. Входящий остаток - это последняя запись исходящего остатка за прошлый день.
Не совпадение входящего и операций за день подразумевает, что система где-то накосячила. К примеру у нас входящий остаток 100, сумма всех операций за день составила -45, а исходящий за день оказался 50. 5 куда-то делось.
Проблема в том, что в таблице rest нету столбца со значением порядкового номера строки, что в разы бы облегчило обращение к предыдущей записи по отношению к "текущей" (или требуемой).
Как можно осуществить обращение к предыдущей записи для дальнейшего сравнения с суммой операций? Другие решение тоже приветствуются
Заранее спасибо.

Добавлено через 43 минуты
upd

Я тут подумал и понял, что исходящий остаток обновляется как только совершается новая операция и поэтому использовать предыдущую запись для требуемой задачи - не вариант.
Нужно использовать последнюю запись за предыдущий день и последнюю запись за текущий день.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.07.2013, 19:27
Ответы с готовыми решениями:

Обращение к предыдущей записи
Доброго времени суток. Вторую неделю читаю форум по данной проблеме, но все не могу найти что-то подходящее (либо не могу нормально...

Обращение к записи в таблице
Не подскажите как обратиться к записи в таблице MS Access

Запрос (обращение к предыдущей строке)
Всем привет. Есть такой вопрос. Имеется база данных. В ней таблица. Нужно создать вычисляемое поле "остаток". Вычисляется оно...

3
76 / 62 / 24
Регистрация: 21.06.2013
Сообщений: 330
15.07.2013, 22:50
Просто для информации. В SQL СУБД записи в таблице хранятся в произвольном порядке, поэтому нет такого понятия как "предыдущая запись" если у записей в таблице нет какого-либо ключевого поля, по которому можно отличить предыдущую запись от текущей.

В документации даже пишут, что если выполнить два раза SELECT * FROM table; то СУБД не гарантирует, что оба раза порядок выдаваемых записей будет одинаковым.
0
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 2
15.07.2013, 23:09  [ТС]
Цитата Сообщение от corochoone Посмотреть сообщение
Просто для информации. В SQL СУБД записи в таблице хранятся в произвольном порядке, поэтому нет такого понятия как "предыдущая запись" если у записей в таблице нет какого-либо ключевого поля, по которому можно отличить предыдущую запись от текущей.

В документации даже пишут, что если выполнить два раза SELECT * FROM table; то СУБД не гарантирует, что оба раза порядок выдаваемых записей будет одинаковым.
Ок, спасибо.

Тогда какие предложения есть?
Подробнее распишу принцип:
У клиента есть деньги на счету. К примеру в понедельник он ничего с ними не делал, а во вторник и среду - тратил.
Запись rest в таблице rests показывает исходящий остаток (т.е. сколько средств есть на данный момент), каждое изменение баланса фиксируется и заносится в табличку (т.е. можно сказать, что date в таблице rests = date в таблице DocDetails).
Требуется вывести входящий остаток (коим является последняя исходящая запись), который не соответствует обороту за день.
Опять на примере легче показать.
В понедельник у клиента было 100 рублей, во вторник он не тратил ничего, в среду потратил 20 рублей. Т.е. к четвергу, его входящий остаток составил 80 рублей. В четверг он еще раз потратил 20 и отдельно 5. Исходящий на четверг должен составить 55 рублей. На деле же составил 50 (это пример моделирует сбои, которые действительно имеют место быть).
Т.е. требуется вывести всех клиентов, которые имеют не стыковки следующего рода: 80-20-5=55, но система показывает 50 (50+20+5=75).
Каждая операция имеет дату (как rest так и в DocDetails). И я сделал такую вот фигню:

SQL
1
2
3
4
5
SELECT c.custid, c.custname, a.account, r.date
FROM customer c INNER JOIN rests r ON c.custid=r.custid
        INNER JOIN accounts a ON a.accountid=r.accountid
        INNER JOIN docdetails dd ON c.custid=dd.custid
WHERE r.date IN (SELECT MAX (DATE) FROM rests WHERE DATE < > ‘требуемая дата’) AND r.rest <> ( (SELECT SUM(dd.sum) FROM docdetails dd WHERE dd.debitcredit = ‘D’ AND dd.custid=c.custid AND dd.date = ‘требуемая дата’)(SELECT SUM (dd.sum) FROM docdetails dd WHERE dd.debitcredit = ‘C’ AND dd.custid=c.custid AND dd.date = ‘требуемая дата’) )
Я почти уверен, что это работать вообще не будет, не говоря уже, что решение очень частное.
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
16.07.2013, 11:19
решение существенно зависит от версии sql-сервера
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.07.2013, 11:19
Помогаю со студенческими работами здесь

Обратиться к предыдущей записи
вот такой вопрос: допустим есть 2 поля в форме &quot;остаток&quot; и допустим &quot;поле 2&quot;, как с помощью выражения или байсика аксесовского сделать...

Значение предыдущей записи +1
Добрый день. Нашёл на форуме много вариантов, что бы по в поле формы &quot;значение по умолчанию&quot; ставилось &quot;максимальное число +...

Вставка значения предыдущей записи
Доброго времени суток! Пожалуйста, помогите разобраться, как сделать следующее: В таблице есть несколько записей, у которых есть дата...

Копирование предыдущей записи поля
Необходимо, чтобы при определенном условии копировалось предыдущее значение поля. Private Sub б_AfterUpdate() If б.Text =...

Вывод в поле предыдущей записи таблицы
Здравствуйте. заранее пардонте за 100% глупый вопрос... мамой клянусь не первый день ответ ищу :cry: не могу вывести в поле прошлую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru