0
Day1
IP Address  Model Number    MAC Address Host Name   Date    Phone Load Version
10.1.1.14   CP-8945 70CA9B010000    SEP70CA9B01001  2012-06-01 SCCP 9-2-2-0
10.1.1.15   CP-8945 70CA9B010001    SEP70CA9B01002  2012-06-01 SCCP 9-2-2-0
10.1.1.16   CP-8945 70CA9B010002    SEP70CA9B01003  2012-06-01 SCCP 9-2-2-0
10.1.1.17   CP-8945 70CA9B010003    SEP70CA9B01004  2012-06-01 SCCP 9-2-2-0

Day2
IP Address  Model Number    MAC Address Host Name   Date    Phone Load Version
10.1.1.14   CP-8945 70CA9B010000    SEP70CA9B01001  2012-06-02 SCCP 9-2-2-0
10.1.1.15   CP-8945 70CA9B010001    SEP70CA9B01002  2012-06-02 SCCP 9-2-2-0
10.1.1.16   CP-8945 70CA9B010002    SEP70CA9B01003  2012-06-02 SCCP 9-2-2-0
10.1.1.17   CP-8945 70CA9B010003    SEP70CA9B01004  2012-06-02 SCCP 9-2-2-1

Result
10.1.1.17   CP-8945 70CA9B010003    SEP70CA9B01004  2012-06-02 SCCP 9-2-2-1

我不确定这是否可能。我有一个 MySQL 表,其中包含除日期之外的多个匹配行。我将如何比较 2 个日期并在任何列中列出差异?

4

2 回答 2

0

听起来你想要的是设置差异。

在代码中解决此问题的一种简单方法是简单地计算相关数据的集合差异。您可以通过简单地连接指示更改的字段来为每一行创建一个“指纹”(也许用颜色将它们连接起来,以便以后将它们分开)

伪代码:

SET1 = SELECT CONCAT(ip, ":", model_number, ":", mac_address, ":", host_name, ":", load_version) FROM day1

SET2 = SELECT CONCAT(ip, ":", model_number, ":", mac_address, ":", host_name, ":", load_version) FROM day1

RESULT = SET2 - SET1
于 2012-06-01T15:03:34.667 回答
0

我之前在 SQL Trigger 中尝试过同样的场景,这就是我所做的。

SELECT 
    d2.ip_add,
    d2.mdl_num,
    d2.mac_add,
    d2.host_name,
    d2.date,
    d2.phone,
    d2.load_ver
From 
    day2 d2
LEFT JOIN
    day1 d1
ON
d1.ip_add = d2.ip_add
WHERE
    d2.ip_add <> d1.ip_add
OR 
    d2.mdl_num <> d1.mdl_num
OR
    d2.mac_add <> d1.mac_add
OR
    d2.host_name <> d1.host_name
OR
    d2.phone <> d1.phone
OR
    d2.load_ver <> d1.load_ver; 

这将返回两个相同表之间的差异。

我编辑我的查询,以便它只会在 1 个表上查看。试试这个,

SELECT 
    d2.ip_add,
    d2.mdl_num,
    d2.mac_add,
    d2.host_name,
    d2.date,
    d2.phone,
    d2.load_ver
FROM 
        (SELECT 
            ip_add,
            mdl_num,
            mac_add,
            host_name,
            DATE,
            phone,
            load_ver,
            day
         FROM
            tblRecords
         WHERE
            day = 2
         ) AS d2
LEFT JOIN
        (SELECT 
            ip_add,
            mdl_num,
            mac_add,
            host_name,
            DATE,
            phone,
            load_ver,
            day
         FROM
            tblRecords
         WHERE
             day = 1
        ) AS d1
ON
    d1.ip_add = d2.ip_add
WHERE
    d2.ip_add <> d1.ip_add
OR 
    d2.mdl_num <> d1.mdl_num
OR
    d2.mac_add <> d1.mac_add
OR
    d2.host_name <> d1.host_name
OR
    d2.phone <> d1.phone
OR
    d2.load_ver <> d1.load_ver; 
于 2012-06-01T15:08:39.107 回答