status_tb
1-е изменение
+----+----------+-------------+----------+--------------------+
| id | status | description | state_id | last_modified_on |
+----+----------+-------------+----------+--------------------+
| 1 | new | north | 1 | 2018-10-10 12:30:00|
| 2 | assign | south | 2 | 2018-10-10 13:30:00|
| 3 |Postponed | east | 2 | 2018-10-10 14:30:00|
| 4 | Fixed | west | 3 | 2018-10-10 15:30:00|
| 35 | Test | South-test | 4 | 2018-10-10 20:30:00|<-1st try
+----+----------+-------------+----------+--------------------+
2-е изменение
+----+----------+-------------+----------+--------------------+
| id | status | description | state_id | last_modified_on |
+----+----------+-------------+----------+--------------------+
| 1 | new | north | 1 | 2018-10-10 12:30:00|
| 2 | assign | south | 2 | 2018-10-10 13:30:00|
| 3 |Postponed | east | 2 | 2018-10-10 24:30:00|
| 4 | Fixed | west | 3 | 2018-10-10 15:30:00|
| 35 | Try_OLD | Tried_OLD | 4 | 2018-10-10 22:22:22|<-2nd try
+----+----------+-------------+----------+--------------------+
status_backup_tb (старые значения (изменение b4) попадают в резервное копирование потриггер после обновления в status_tb)
+----------+----+----------+-------------+----------+----------------+
|backup_id | id | status | description | state_id |last_modified_on|
+----------+----+----------+-------------+----------+----------------+
| 1 | 1 |new | north | 1 |2018-10-10 12:30:00
| 2 | 2 |assign | south | 2 |2018-10-10 13:30:00
| 3 | 3 |Postponed | east | 2 |2018-10-10 24:30:00
| 4 | 4 | Fixed | west | 3 |2018-10-10 15:30:00
| 7 | 35| Rejected | Testing | 4 |2018-10-10 11:00:00
+----------+----+----------+-------------+----------+
+----------+----+----------+-------------+----------+----------------+
|backup_id | id | status | description| state_id |last_modified_on|
+----------+----+----------+------------+----------+----------------+
| 1 | 1 |new | north | 1 |2018-10-10 12:30:00
| 2 | 2 |assign | south | 2 |2018-10-10 13:30:00
| 3 | 3 |Postponed | east | 2 |2018-10-10 24:30:00
| 4 | 4 | Fixed | west | 3 |2018-10-10 15:30:00
| 7 | 35| Rejected | Testing | 4 |2018-10-10 11:00:00
| 8 | 35| Test | South-test | 4 |2018-10-10 20:30:00<
1-й раз Я выполняю свой запрос, чтобы вставить-выбрать мои значения сравнения
|new_id | id |Column_changed| Old_value|New_value | Modified_on |
+-------+----+--------------+----------+----------+-------------------+
|1 | 35 | status |Rejected | Test |2018-10-10 20:30:00|
|2 | 35 |description |Testing |South-test|2018-10-10 20:30:00|
+-------+----+--------------+----------+----------+-------------------+
2-й раз Я выполняю свой запрос, чтобы вставить и выбрать мои значения сравнения
Дата изменения для 1-го измененного изменения возвращается к 2018-10-10 22:22:22
вместо того, чтобы оставаться 2018-10-10 20:30:00
, когда я применяю изменение ктот же идентификатор
фактический результат (ошибка)
|new_id| id |Column_changed| Old_value |New_value |Modified_on |
+------+----+--------------+------------+----------+-------------------+
|1 | 35 | status |Rejected |Test |2018-10-10 22:22:22|<
|2 | 35 |description | Testing |South-test|2018-10-10 22:22:22|<
+------+----+--------------+------------+----------+-------------------+
|3 | 35 | status | Test | Try_OLD |2018-10-10 22:22:22|
|4 | 35 |description | South-test |Tried_OLD |2018-10-10 22:22:22|
+------+----+--------------+------------+----------+-------------------+
ожидаемый результат
|new_id | id |Column_changed| Old_value |New_value |Modified_on |
+------+----+--------------+------------+----------+-------------------+
|1 | 35 | status |Rejected |Test |2018-10-10 20:30:00|<
|2 | 35 |description | Testing |South-test|2018-10-10 20:30:00|<
+------+----+--------------+------------+----------+-------------------+
|3 | 35 | status | Test | Try_OLD |2018-10-10 22:22:22|
|4 | 35 |description | South-test |Tried_OLD |2018-10-10 22:22:22|
+------+----+--------------+------------+----------+-------------------+
new_id: 1 и 2от первого изменения, 3 и 4 от второго изменения
SQL
INSERT INTO audit_status_tb (id, Column_changed, Old_value, New_value)
SELECT
distinct s.id,
'status' AS Column_changed,
s.status AS Old_value,
b.status AS New_value,
s.last_modified_on
FROM status_tb AS s
JOIN status_backup_tb AS b
ON b.id = s.id AND
b.status <> s.status
UNION ALL
SELECT
distinct s.id,
'description' AS Column_changed,
s.description AS Old_value,
b.description AS New_value,
s.last_modified_on
FROM status_tb AS s
JOIN status_backup_tb AS b
ON b.id = s.id AND
b.description <> s.description
UNION ALL
SELECT
distinct s.id,
'state_id' AS Column_changed,
s.state_id AS Old_value,
b.state_id AS New_value,
s.last_modified_on
FROM status_tb AS s
JOIN status_backup_tb AS b
ON b.id = s.id AND
b.state_id <> s.state_id