INSERT INTO ebook_snapshot(ebook_id, `date`, view_count, vote_count, view_increase, vote_increase) SELECT t1.id, curdate(), 0, 0, 0, 0 FROM ebook t1 WHERE NOT EXISTS(SELECT 1 FROM ebook_snapshot t2 WHERE t1.id = t2.ebook_id AND t2.`date` = curdate()); UPDATE ebook_snapshot t1, ebook t2 SET t1.view_count = t2.view_count, t1.vote_count = t2.vote_count WHERE t1.`date` = curdate() AND t1.ebook_id = t2.id; UPDATE ebook_snapshot t1 LEFT JOIN (SELECT ebook_id, view_count, vote_count FROM ebook_snapshot WHERE `date` = date_sub(curdate(), INTERVAL 1 DAY)) t2 ON t1.ebook_id = t2.ebook_id SET t1.view_increase = (t1.view_count - ifnull(t2.view_count, 0)), t1.vote_increase = (t1.vote_count - ifnull(t2.vote_count, 0)) WHERE t1.`date` = curdate();