0

我有一个表,其中包含〜 300.000 条记录,每对在特定列上具有相同的日期时间,例如

 id    date                  feat1  feat2  
---------------------------------------------------------------------------
 1    10-12-2013 21:35:10    4.2   4.6  
 2    10-12-2013 21:35:10    4.2   4.61  
 3    10-12-2013 21:35:20    4.4   4.3 
 4    10-12-2013 21:35:20    4.4   4.31 
 5    10-12-2013 21:35:30    4.6   4.4 
 6    10-12-2013 21:35:30    4.6   4.41 

显然,每对记录具有相同的日期值。所以我需要一个mysql查询来消除重复,最后只有

1     10-12-2013 21:35:10   4.2        4.6
3     10-12-2013 21:35:20   4.4        4.3
5     10-12-2013 21:35:30   4.6        4.4

什么是 mysql 查询,它将比较记录日期时间并消除重复项?

4

3 回答 3

2

您可以索引来删除重复的日期

ALTER IGNORE TABLE table_name ADD UNIQUE INDEX(date);

此查询将删除表中的重复值,如果需要,您可以删除此索引

于 2013-08-30T11:22:22.610 回答
1

尝试这个:

CREATE TEMPORARY TABLE app
(id int)

INSERT INTO app (id)
SELECT t.id 
FROM myTable t
WHERE EXISTS(
    SELECT 'PREVIOUS'
    FROM myTable t2
    WHERE t2.id < t.id
    AND t2.date = t.date
)

DELETE FROM myTable
WHERE id in (select id from app)

我使用了一个临时表,因为在 MySql 中,您无法删除子查询中存在同一张表的表。我不喜欢将 DELETE 与 JOIN 一起使用(在 MySql 中可以执行)。

如果您想优化您的查询,请结合 id、date 的索引。

警告:我只考虑了日期字段和 id,我排除了 features 字段(feat1 和 feat2)。如果您想在这些字段中扩展之前的条件,请分析它们与行的不同。

于 2013-08-30T10:53:05.503 回答
-2

在查询中使用 Have 子句,如下所示:-

SELECT Count(date_field) as dt_cnt from table name with dt_cnt > 1 ;

于 2013-08-30T10:17:50.130 回答