Мне нужна помощь, и я знаю, что я не единственный, кто имеет дело с этой проблемой, но мне интересно, есть ли у вас какие-то идеи о том, как справиться с ситуацией сравнения двух строк данных, заполняющих даты начала и окончания.
Чтобы дать вам некоторый контекст, у нас есть огромная иерархия (около 8000 строк и около 12 столбцов в ширину), которая обновляется каждый год. Иногда значения меняются, а иногда нет. Когда значения не меняются, мне не нужно корректировать даты. Когда значения меняются и добавляется новая строка, мне нужно изменить данные.
Я приложил некоторые поддельные данные, чтобы попытаться проиллюстрировать мои данные. Я строю это в MS Access, поэтому я думаю, что это больше вопрос типа DBA, который будет обрабатываться с помощью метода типа набора записей.
В моем примере у меня есть две таблицы - Старая таблица и Новая таблица , В каждой таблице есть поле кода маршрутизации, которое представляет мое поле соединения и первичный ключ для этой таблицы. Старая таблица представляет существующие данные - tblMain. Новая таблица представляет данные для добавления - tblTemp.
Чтобы добавить данные, у меня есть запрос на добавление, настроенный в Access. Я выполняю левое соединение между старой и новой таблицами, объединяя каждое поле и добавляя пустые строки в старой таблице. Это нормально, и это не то, где моя проблема.
Что вызывает у меня проблему, так это как заполнить даты начала и окончания. Как видно из моих таблиц, мы работаем в зоопарке. Скажем только ради аргумента, наш зоопарк начал довольно просто и стал более изощренным. Теперь мы хотим, чтобы наша иерархия расширилась и стала немного более детальной, поскольку мы сейчас собираем тип животного (Уровень 4) и родное местоположение (Уровень 5).
Как вы можете видеть при сравнении одной таблицы для другого коды маршрутизации одинаковы, поэтому запрос на добавление должен иметь соединение для каждого поля. Когда вы делаете это, вы возвращаете таблицу результатов, которая по существу является старой и новой таблицами, сложенными друг на друга. Вы можете подумать о запросе Union, но это даст мне дубликаты, и я не хочу этого.
Если вы заметите в таблице результатов есть дата начала и окончания. Скажем так, я получаю начальную и конечную даты через окно сообщения, которое появляется при импорте данных и хранится в переменной. Я думаю, что в моих реальных данных есть даты, но я все еще пытаюсь это проверить.
Так как мне сравнить (нужен псевдокод для логики c)? • Для каждого кода маршрутизации:
- Сравнить уровни 1-5 Если код маршрутизации одинаков, но уровни 1-5 не совпадают, заполните дату окончания старой записи, укажите дату начала новой записи
Эта идея сравнения двух записей и заполнения данных довольно распространена в моей организации, но я не нашел способа создания логики c, которая бы работала последовательно, поэтому любой приветствуется помощь или предложения.
Старая таблица
Новая таблица
Таблица результатов