【发布时间】:2016-05-04 02:46:24
【问题描述】:
我有一个巨大的 MySQL 表,它每秒增长大约 90 行,每 4 小时有 130 万行随时间戳转储到那里
user(varchar) | created_at(timestamp)
----------------------------
user 1 | 2016-01-27 08:00:00
user 2 | 2016-01-27 08:00:00
user 3 | 2016-01-27 08:00:00
...
user 1 | 2016-01-27 12:00:00
user 2 | 2016-01-27 12:00:00
等等...将超过一个月的数据修剪为每天只有一行的最佳方法是什么?
00:00 总是有行,所以我在想一些类似的事情
created_at >= date + 00:00 and created_at < date + 19:59
或
select user, max(created_at) from table where created_at = date group by username
【问题讨论】:
-
每天只有一行是什么意思?
-
所以每 4 小时我会为所有用户获取一些数据,但一个月后我不需要那么精细,每天只需要一个,所以理想情况下只保留当天的第一次导入。分钟一秒始终为 0,因为它是导入开始的时间,它在 PHP 中完成为
date('Y-m-d H:00:00') -
你实际上可以在mysql上使用events,你可以安排这些事件来删除某个表并在每天的特定时间运行该事件
-
使用limit 1 或group by created_at 来保持单条记录。
-
我想我已经成功了,虽然
select count(id) from teamsarchive where created_at < DATE_SUB(NOW(), INTERVAL 30 DAY) and HOUR(created_at) = 00
标签: mysql