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

あなたが望むのは設定差のようです。

コードでこれにアプローチする簡単な方法の 1 つは、関連するデータの集合差を単純に計算することです。変更を示すフィールドを連結するだけで、各行の「指紋」を作成できます(後でそれらを分離できるように、おそらくそれらを色で結合します)

擬似コード:

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 トリガーで同じシナリオを実行しようとしましたが、これが私が行ったことです。

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; 

これは、2 つの同一のテーブルの違いを返します。

クエリを編集して、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 に答える