#mysql
#mysql
Вопрос:
В моей базе данных есть большая таблица, где мне нужно отслеживать изменения в столбце (serial и date). Другими словами, отслеживайте, какая дата серийного номера изменилась. Это структура:
pvs
-----
- id (int increment)
- serial (varchar)
- pos_id (int)
- fecha (datetime)
Pos_id — это местоположение, поэтому оно тоже имеет значение.
Я думаю, я мог бы использовать PL, но это уже медленно, поскольку просто запрашивать информацию без какой-либо фильтрации.
Редактировать:
Я загружаю файлы Excel в базу данных, которые соответствуют дате, поэтому решение «при обновлении» для меня неосуществимо.
Когда я говорю «изменения в столбце», я имею в виду изменения в столбце «Serial».
ПРАВКА 2:
Как вы можете видеть, есть четыре столбца, и столбец «serial» является повторяющимся. Наблюдение заключается в том, что этот столбец изменяется со временем для этого pos_id (он представляет установленное устройство, и они выходят из строя и т.д.), Поэтому Мне нужно получить строки, в которых происходят изменения. Например, на рисунке давайте предположим, что позже в id 2900000 serial изменится другой код, например, 312555654. Запись будет:
id | serial | pos_id | fecha
2900000 | 312555654 | 5 | 2018-04-25 00:00:00
Итак, мне нужно получить все эти изменения в одном запросе и таким образом обновить другие таблицы. Если это возможно. Я мог бы использовать pos_id в качестве параметра.
Комментарии:
1. вы можете добавить столбец со значением по умолчанию «при обновлении текущей метки времени», чтобы каждый раз, когда вы обновляете строку, значение обновлялось вместе с меткой времени изменения
2. Это круто, и поскольку я использую Laravel, у меня это уже есть, но дело в том, что эти даты указаны в отчете, они отражают прошлые даты, а не момент, когда они физически обновлены.
3. используйте mysql binlog
4. ваш комментарий имеет мало смысла для меня. Если только вы не говорите о «audi trail». Это совершенно другая история и требует настройки таблицы журнала аудита
5. Если вы загружаете данные с помощью Excel, то вам, вероятно, нужно решить эту проблему во время импорта. Мы пока не знаем, как вы обновляете свои данные — вам нужно будет добавить эту соответствующую информацию, чтобы мы могли помочь вам с этим.
Ответ №1:
Я придумал ответ немного позже:
SELECT min(id), SERIAL, pos_id, MIN(fecha)
FROM pvs
GROUP BY SERIAL, pos_id
ORDER BY MIN(fecha) DESC;
Так что каждый раз, когда изменяется серийный номер, он будет показывать мне первую дату, в которую появляется новый серийный номер.