Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как сопоставить строки из двух таблиц?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1723
Дано: две таблицы. В каждой есть поля datetime, ID кассира, № чека, сумма чека, и столбец FAKE. В одной из них также есть столбец номер смены.
Требуется сопоставить строки одной таблицы строкам другой, при том, что:
а) время чека в одной строке может отличаться от времени чека на несколько минут (от -1 минуты до +10 минут) и в итоге дата одного платежа в двух таблицах может быть разной ;
б) номер чека в первой таблице отличается от номера чека во второй таблице на величину от 0 до +N;
в) номера чеков любой кассы возрастают в рамках смены, после начала смены нумерация начинается заново; Данные по смене даны только для одной таблицы из двух;
г) отдельные строки в обоих таблицах могут отсутствовать;
д) значения в столбце fake равны нулю.

Не могут меняться только id кассира и сумма платежа.
Ограничивающее условие: число и сумма платежей по кассе, включая пропущенные платежи, в первой таблице должны равняться числу и сумме платежей по кассе во второй таблице, включая пропущенные в ней. добавление найденных пропущенных строк в исходные таблицы возможно, но с пометкой в столбце fake=1.

Кто что посоветует?
16 фев 18, 13:07    [21196641]     Ответить | Цитировать Сообщить модератору
 Re: Как сопоставить строки из двух таблиц?  [new]
Добрый Э - Эх
Guest
DaniilSeryi,

а), б) - используй "математический подход" про "эпсилон окружность" - abs(разница значений) <= "некая дельта"
в) легко разделить данные на смены. lead/lag + sum() over(order by) в помощь.
г) внешнее соединение
д) если сможешь найти недостающее - то вставить - дело техники...


З.Ы.
будет вменяемый репрезентативный юзабильный набор тестовых данных - найдутся желающие переложить всё сказанное словами на SQL
16 фев 18, 13:14    [21196687]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить