我在 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_id
总是orig_log_id
独一无二的。但是,两行可能有任何其他字段的重复值。忽略*log_id
字段,我们的问题是两行在所有其他列中可能相同,但对于value
. 我试图找出正确的 SQL 查询,以确定两行(或多行)何时具有相同的date
,date_millis
和值,但,和eib_address
的不同值。到目前为止,我已经能够提出一个查询来完成我上一句中的第一个子句:value
log_id
orig_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
是不行的!