MySQL MAX () изменение типа данных - PullRequest
0 голосов
/ 01 апреля 2020

У меня странная проблема. У меня есть две таблицы, давайте назовем их «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;, я получаю дату за последние несколько лет, которая ожидается, но без «нулевых» значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...