Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 调查结果;“重复”;在一列中不同的行_Mysql_Sql_Duplicates_Duplicate Data - Fatal编程技术网

Mysql 调查结果;“重复”;在一列中不同的行

Mysql 调查结果;“重复”;在一列中不同的行,mysql,sql,duplicates,duplicate-data,Mysql,Sql,Duplicates,Duplicate Data,在MySQL 5.1中,我有一个如下表: +--------------+----------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+----------------+------+-----+---------+----------------+ | log_i

在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\u id
orig\u log\u id
始终是唯一的。但是,对于任何其他字段,两行都可能有重复的值。忽略
*log\u id
字段,我们的问题是,所有其他列中的两行可能相同,但
value
的值不同。我正在试图找出正确的SQL查询,以确定两行(或更多行)何时具有相同的
date
date\u millis
eib\u address
,但
value
log\u id
orig\u log\u 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;

然而,我似乎无法确定
何时不同。我至少知道只要抛出
和main.value!=将.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;
选择*
从传感器记录s1
内部连接传感器\u日志s2
在(s2.DATE=s1.DATE和
s2.DATE_MILLIS=s1.DATE_MILLIS和
s2.EIB_地址=s1.EIB_地址)
其中s1.VALUE s2.VALUE或
s1.LOG\U ID s2.LOG\U ID或
s1.原始日志ID s2.原始日志ID;

分享和享受。

也许我误解了这个问题,但你不能像这样进行
计数吗

SELECT date, date_millis, eib_address, count(*) as nr_dupes
FROM sensors_log
GROUP BY date, date_millis, eib_address
HAVING count(*) > 1


这或多或少是我需要的。我不希望两张表都有完整的内容,但这样就行了。谢谢。这就简单了!也正是我想要的。很明显,我只选择了我关心的列,但在这个解决方案中,通用性非常好。
SELECT date, date_millis, eib_address, 
       group_concat(value), group_concat(log_id), group_concat(orig_log_id)
FROM sensors_log
GROUP BY date, date_millis, eib_address
HAVING count(*) > 1