diff --git a/scripts/shift-old-datetimes-minus-8h.sql b/scripts/shift-old-datetimes-minus-8h.sql index 193cb6d..40a59e1 100644 --- a/scripts/shift-old-datetimes-minus-8h.sql +++ b/scripts/shift-old-datetimes-minus-8h.sql @@ -1,26 +1,34 @@ --- Only devices.created_at / updated_at. first_seen_at / last_seen_at --- were dropped (see 2026_08_04_000002_simplify_devices_columns). --- --- 1) 备份 devices --- 2) 把 @cutoff 改成切时区那一刻 --- 3) 先预览,再 START TRANSACTION … COMMIT --- 4) 提交后:php artisan coruna:daily-stats --all +-- Only devices.created_at / updated_at. +-- 用 mysql -uroot -p -t -vv coruna < 本文件 才会打印行数。 +-- 已成功跑过就不要再跑(会再减 8 小时)。 +-- 改完后:php artisan coruna:daily-stats --all SET time_zone = '+08:00'; SET @cutoff = '2026-09-16 14:00:00'; -- TODO: 改成实际切时区的时间 -SELECT 'created_at' AS col, COUNT(*) AS n, MIN(created_at) AS mn, MAX(created_at) AS mx +SHOW COLUMNS FROM devices LIKE '%_at'; + +SELECT 'preview' AS step, 'created_at' AS col, COUNT(*) AS n, + MIN(created_at) AS mn, MAX(created_at) AS mx FROM devices WHERE created_at IS NOT NULL AND created_at < @cutoff -UNION ALL SELECT 'updated_at', COUNT(*), MIN(updated_at), MAX(updated_at) +UNION ALL +SELECT 'preview', 'updated_at', COUNT(*), MIN(updated_at), MAX(updated_at) FROM devices WHERE updated_at IS NOT NULL AND updated_at < @cutoff; START TRANSACTION; UPDATE devices SET created_at = DATE_SUB(created_at, INTERVAL 8 HOUR) WHERE created_at IS NOT NULL AND created_at < @cutoff; +SELECT ROW_COUNT() AS created_at_updated; + UPDATE devices SET updated_at = DATE_SUB(updated_at, INTERVAL 8 HOUR) WHERE updated_at IS NOT NULL AND updated_at < @cutoff; +SELECT ROW_COUNT() AS updated_at_updated; + +SELECT id, device_id, created_at, updated_at + FROM devices + WHERE created_at IS NOT NULL + ORDER BY id ASC + LIMIT 3; --- 后台看一台改时区前的设备,时间对了再 COMMIT COMMIT; --- ROLLBACK;