mysql - 查找一列不同的 "duplicate"行

标签 mysql sql duplicates duplicate-data

我在 MySQL 5.1 中有如下表:

+--------------+----------------+------+-----+---------+----------------+
| Field        | Type           | Null | Key | Default | Extra          |
+--------------+----------------+------+-----+---------+----------------+
| log_id       | int(11)        | NO   | PRI | NULL    | auto_increment |
| date         | datetime       | NO   | MUL | NULL    |                |
| date_millis  | int(3)         | NO   |     | NULL    |                |
| eib_address  | varchar(20)    | NO   |     | NULL    |                |
| ip_address   | varchar(15)    | NO   |     | NULL    |                |
| value        | decimal(20,10) | NO   | MUL | NULL    |                |
| application  | tinyint(4)     | NO   |     | NULL    |                |
| phys_address | varchar(20)    | NO   |     | NULL    |                |
| orig_log_id  | bigint(20)     | NO   |     | NULL    |                |
+--------------+----------------+------+-----+---------+----------------+

在此表中,log_idorig_log_id 始终是唯一的。但是,对于任何其他字段,两行可能具有重复值。忽略 *log_id 字段,我们的问题是两行在所有其他列中可能相同,但 value 的值不同。我试图找出正确的 SQL 查询来识别两行(或更多行)何时具有相同的 datedate_milliseib_address 值,但 valuelog_idorig_log_id 的值不同。到目前为止,我已经能够提出一个查询来完成我上一句中的第一个子句:

SELECT main.* 
FROM sensors_log main
INNER JOIN 
    (SELECT date, date_millis, eib_address 
    FROM sensors_log 
    GROUP BY date, date_millis, eib_address 
    HAVING count(eib_address) > 1) dupes 
ON main.date = dupes.date 
    AND main.date_millis = dupes.date_millis 
    AND main.eib_address = dupes.eib_address;

但是,我似乎无法弄清楚 value 何时不同。我至少知道只是将 AND main.value != dupes.value 放入 ON 子句中是行不通的!

最佳答案

我认为它比您尝试制作的要简单一些。试试这个:

SELECT *
  FROM SENSORS_LOG s1
  INNER JOIN SENSORS_LOG s2
    ON (s2.DATE = s1.DATE AND
        s2.DATE_MILLIS = s1.DATE_MILLIS AND
        s2.EIB_ADDRESS = s1.EIB_ADDRESS)
  WHERE s1.VALUE <> s2.VALUE OR
        s1.LOG_ID <> s2.LOG_ID OR
        s1.ORIG_LOG_ID <> s2.ORIG_LOG_ID;

分享和享受。

关于mysql - 查找一列不同的 "duplicate"行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5408009/

相关文章:

MySQL 删除字符串开头和结尾字符的函数

mysql join查找 "missing" "related"行

php复选框保留页面之间的值

sql - 查找忽略重叠的总分钟数(将基于光标的答案转换为 CTE)

sql - 如何检查重复值

MySQL 删除重复的行集

c# - 删除具有不同间距的重复字符串的最佳方法?

mysql - 操作存储在mysql文本列中的Json数据结构

asp.net - 为什么我会间歇性地收到此错误? "The server was not found or was not accessible"

unix - 查找并打印具有重复列值的行