У меня странная проблема. У меня есть две таблицы, давайте назовем их «table1» и «table2». Я пишу миграцию, чтобы заполнить «table2» данными, найденными в «table1».
Частью этой миграции является заполнение поля метки времени. В «table1» у меня есть сводный список строк, которые я группирую, а в «table2» я мог бы хотеть иметь минимальные или максимальные значения столбцов даты в этой совокупности. Вот пример «выбора» нужных мне данных в «table2» из «table1»:
SELECT
session_uuid,
website_uuid,
null,
MIN(created_at),
MAX(updated_at),
MAX(deleted_at)
FROM table1
GROUP BY session_uuid, website_uuid
Это прекрасно работает, возвращает нужные мне данные. Теперь, если я вставлю это в запрос «вставить в ... выбрать», он будет выглядеть так:
INSERT INTO table2 (uuid, website_uuid, metadata, created_at, updated_at, deleted_at)
SELECT
session_uuid,
website_uuid,
null,
MIN(created_at),
MAX(updated_at),
MAX(deleted_at)
FROM table1
GROUP BY session_uuid, website_uuid
... тогда я получу следующую ошибку:
[22001][1292] Data truncation: Incorrect datetime value: '0000-00-00 00:00:00' for column 'deleted_at' at row 1
Теперь этот столбец, исключенный из столбца, является временной меткой, допускающей обнуление. Тип одинаков для обеих таблиц. Я пробовал оба MIN(deleted_at)
и MAX(deleted_at)
, но ни один из них не работает. Как ни странно, AVG(deleted_at)
будет работать без ошибок, но мне не нужно среднее значение.
Я убедился, что в моем наборе данных нет нулевых значений. Если я запускаю SELECT MIN(deleted_at) FROM table1 WHERE deleted_at IS NOT NULL;
, я получаю дату за последние несколько лет, которая ожидается, но без «нулевых» значений.