У меня есть таблица, подобная следующей в 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
не делает этого!