mysql - 如何删除除每小时一条以外的所有记录

标签 mysql sql

我有一个包含数百万传感器记录的 mysql 表,其结构如下:

datanumber (auto increment), 
stationid (int), 
sensortype (int),
measuredate (datetime),
data (medtext)

每个站点每 2-10 分钟为每种传感器类型(2-5 个传感器)添加一条记录

我想每小时、每个传感器、每个站点只保留一个记录 并且仅当测量值超过 1 年时才会如此。

我知道如何选择超过一年的数据,但我不知道如何删除行,除了每小时删除一行。它是第一个、最后一个还是每小时保留的随机值并不重要。我也不需要计算平均值什么的,只需要去掉存储的记录量

最佳答案

你应该可以做类似的事情

Select * from observations where <old> group by sensortype, stationid, extract(year_month, measure_date), extract(day_hour, measure_date);

group_by会将每组中的记录折叠成一个。如果需要,您可以将其选择到新表中。

如果你真的需要删除所有多余的旧记录,只需使用上面的查询选择数据编号,然后删除所有记录NOT IN(<those ids>) .

关于mysql - 如何删除除每小时一条以外的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536658/

相关文章:

mysql - Symfony2 - 将 mysql 数据库备份到文件中

mysql - 如何从数据库中选择得票最多的用户?

php - 如何使用 php 在数据库中插入 ISO-8859-1 字符集值

php - 动态更改 PDO 语句中的列名

c++ - 当我使用 ADO 但它在 MS Access 中工作时,将 varchar 转换为 double 失败

mysql - 如何在字符串列中仅获取 char 的第 N 个实例?

php - 从数据库中直接输出 html

sql - 子查询内的 SELECT INTO

sql - SQL:将3个表与和连接起来,对未聚合的列进行过滤

SQL:间隙和岛屿、分组日期