-- 业务「已结课」:首次点名落库时间;清空出勤后回到 NULL。与 start_from/end_by 日历态互补。 ALTER TABLE clazz ADD COLUMN completed_at TIMESTAMP NULL; COMMENT ON COLUMN clazz.completed_at IS '首次批量保存出勤且存在有效行时写入;出勤被清空则置 NULL。NULL 表示业务上未结课。';