У меня есть доступ к набору данных отчетности (который я не контролирую), который мы ежедневно получаем из облачной службы и храним в mysql db, чтобы запускать расширенную отчетность и сообщать о сбое локально с сторонним программным обеспечением для визуализации данных.Как добавить значение автоматического увеличения в двойное значение?
Данные часто имеют повторяющиеся значения в поле id, которые создают проблемы при объединении с другими таблицами для анализа данных.
Например:
+-------------+----------+------------+----------+
| workfile_id | zip_code | date | total |
+-------------+----------+------------+----------+
| 78002 | 90210 | 2016-11-11 | 2010.023 |
| 78002 | 90210 | 2016-12-22 | 427.132 |
+-------------+----------+------------+----------+
Workfile_id дублируется, потому что это та же работа, но дополнительная работа на работе была выполнена в другом месяце, чем оригинальные работы. Вместо программного обеспечения, создающего еще один идентификатор рабочего файла для задания, используется то же самое.
Doing соединяется с другими таблицами на workfile_id является проблематичным, когда более чем один из того же идентификатора присутствует, поэтому мне было интересно, если это возможно, чтобы сделать одну из двух вещей:
- Сделать дубликат workfile_id уникальной , Пусть sql добавляет число в идентификатор рабочего файла, когда найден дубликат. Первый дубликат (или второе вхождение одного и того же идентификатора файла) должен получить .01, добавленный к концу идентификатора рабочего файла. Затем, если будет вставлен другой дубликат, ему нужно будет автоматически увеличивать добавленное число, например .02 и т. Д. С любым последующим дублирующим workfile_id. Этот метод будет работать лучше всего с нашими данными, но мне любопытно, как это было бы сложно для сервера с точки зрения производительности. Если бы я мог запланировать изменение, которое должно произойти после того, как данные были вставлены, чтобы ускорить ввод исходных данных, это было бы идеально.
- Суммировать полные столбцы и удалять повторяющиеся строки workfile_id. Задайте задачу, которая идентифицирует повторяющиеся файлы workfile_id и суммирует финансовые столбцы дубликатов, заменяя исходную сумму на новую сумму и удаляя «новую строку» после того, как столбцы были добавлены вместе. Это более беспорядочно с точки зрения сохранения данных, но приемлемо, если первое решение невозможно.
Мое предположение, что будет значительные издержки, чтобы сервер сравнить новые значения workfile_id для всех существующих значений worlfile_id вставляется каждый раз, когда данные, но наш набор данных невелик и новые данные только вставляются один раз в день, на 1 : 30am, и также должно быть возможно сохранить дубликат workfile_id для поиска строк, вставленных в течение последних 6 месяцев.
Является находки дублирует в колонке (workfile_id) и добавление автоинкрементного значения на workfile_id возможной?
EDIT: У меня возникли проблемы с запуском моего триггера, основанного на ответе sdsc81 ниже. Любые идеи?
DELIMITER //
CREATE TRIGGER append_subID_to_workfile_ID_salesjournal
AFTER INSERT
ON salesjournal FOR EACH ROW
BEGIN
SET @COUNTER = (SELECT (COUNT(*)-1) FROM salesjournal WHERE workfile_id = NEW.workfile_id);
IF @COUNTER > 1 THEN
UPDATE salesjournal SET workfile_id = CONCAT(workfile_id, @COUNTER) WHERE id = NEW.id;
END IF;
END;//
DELIMITER ;
Это трудно понять, если триггер не работает вообще, или если только код в триггер не работает. У меня нет ошибок при вставке. Есть ли способ отлаживать ошибки запуска?
Если вам нужно, чтобы значение добавлялось в 2 цифры, вы можете использовать что-то вроде 'SET @COUNTER = CONCAT ('0', @COUNTER);' и затем 'SET @COUNTER = SUBSTR (@COUNTER, LENGTH (@COUNTER - 1)); 'перед инструкцией' UPDATE your_table ... '. Это грязно, но нужно делать трюк. Приветствия – sdsc81
Да, извините, если я не понял. Я полностью контролирую базу данных назначения. Я не администратор db по торговле, поэтому я не понял, как это будет сделано. Сегодня я болотистый, но я буду проверять ваш метод как можно скорее и выбрать его правильно, если он будет работать. Спасибо за быстрый ответ. – tephlon
Привет! Я дважды проверял и вижу, что я исправил запрос. Кстати, это все ваши поля в таблице? или у вас есть unike * id *, который идентифицирует каждую строку? (Я имею в виду, как значение автоинкремента). Потому что это необходимо для правильной работы. Дай мне знать. – sdsc81