Я бы спросил, почему вы хотите сохранить это, но если вам нужно, сгенерированный столбец может подойти.
drop table if exists t;
create table t(id int, report_date date);
ALTER TABLE t
ADD COLUMN `First_Day` DATE as
(date_add(date_add(last_day(date(report_date)),interval 1 day),interval -1 month));
insert into t (id,report_date) values
(1,'2018-01-08'),(2,'2018-02-09');
select * from t;
+------+-------------+------------+
| id | report_date | First_Day |
+------+-------------+------------+
| 1 | 2018-01-08 | 2018-01-01 |
| 2 | 2018-02-09 | 2018-02-01 |
+------+-------------+------------+
2 rows in set (0.00 sec)
Если вы решите пойти по этому пути или с помощью триггера вам придется записать одноразовое обновление, чтобы заполнить этот столбец для существующих данных.