Вы должны хранить свои метки времени в правильном столбце даты и времени. При этом мы можем попытаться обойти текстовые даты, используя STR_TO_DATE
. Я бы на самом деле предложил не добавлять новый столбец, так как ваш запрос только для производных данных. Вместо этого сгенерируйте этот столбец при запросе:
SELECT
id,
last_update,
DATEDIFF(STR_TO_DATE(last_update, '%Y-%m-%dT%H:%i:%s'),
(SELECT STR_TO_DATE(t2.last_update, '%Y-%m-%dT%H:%i:%s')
FROM yourTable t2
WHERE t2.id < t1.id ORDER BY t2.id DESC)) AS days_since_last_update
FROM yourTable t1
ORDER BY t1.id;
Первые дни с момента последнего обновления будут иметь значение NULL
, так как для таблицы не было записано более раннее обновление. Хотя, если вам нужно значение по умолчанию, это можно легко включить.
Если вы хотите вместо этого указать разницу в днях между столбцом last_update
и сегодняшней датой, используйте:
SELECT
id,
last_update,
DATEDIFF(CURDATE(),
STR_TO_DATE(last_update, '%Y-%m-%dT%H:%i:%s')) AS days_since_last_update
FROM yourTable
ORDER BY id;