2016-09-06 11 views
-3

同じ列を共有する行を見つける必要がありますが、他の列にも異なる値があります。私は参考としてSQL Fiddleを作成しました。私の結果はまだ0です。どんな助けでも大歓迎です。SQLは、ある列に対して同じ値を持ち、他の列に異なる値を持つ行を見つけます。

CREATE TABLE IF NOT EXISTS `tracking` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `IP` varchar(255) NOT NULL, 
    `MAC` varchar(255) NOT NULL, 
    `UUID` varchar(255) NOT NULL, 
    `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `isActive` tinyint(1) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ; 

-- 
-- Dumping data for table `tracking` 
-- 

INSERT INTO `tracking` (`id`, `IP`, `MAC`, `UUID`, `timestamp`, `isActive`) VALUES 
(1, '98.186.154.212.12', '10:DD:B1', ' uuid:a5fadbbd ', '2016-09-06 15:03:52', 0), 
(2, '423.2362.234', '2534623523523', ' uuid:a5fadbbd ', '2016-09-06 15:15:28', 0), 
(3, '98.186.154.212.12', '10:DD:B1', ' uuid:a5fadbbd ', '2016-09-06 15:03:52', 0), 
(4, '98.186.154.212.12', '10:DD:B1', ' uuid:a5fadbbd ', '2016-09-06 15:04:09', 0), 
(5, '98.186.154.212.12', '10:DD:B1', ' uuid:a5fadbbd ', '2016-09-06 15:04:44', 0), 
(6, '98.186.154.212.12', '10:DD:B1', ' uuid:a5fadbbd ', '2016-09-06 15:04:44', 0), 
(7, '98.186.154.212.12', '10:DD:B1', ' uuid:a5fadbbd ', '2016-09-06 15:06:28', 0), 
(8, '98.186.154.212.12', '10:DD:B1', ' uuid:a5fadbbd ', '2016-09-06 15:06:28', 0), 
(9, '98.186.154.212.12', '10:DD:B1', ' uuid:a5fadbbd ', '2016-09-06 15:06:28', 0); 


SELECT * 
    FROM tracking t 
    WHERE timestamp = 
     (SELECT MAX(timestamp) 
      FROM tracking 
      WHERE UUID = t.UUID 
       AND (IP <> t.IP OR MAC <> t.MAC)) 
    GROUP BY id; 

http://sqlfiddle.com/#!9/c0ae3b6/4

望ましい結果は次のようになります。

+2

質問にデータとコードサンプルを含める必要があります。 SQLのフィドルは素晴らしいですが、よく書かれた質問を代用するものではありません。たとえば、SQL Fiddleはダウンすることができます。また、望ましい結果が役立つだろう。 –

+0

これは先ほど投稿した同じ質問ではありませんか? – Barmar

+0

クエリを書き込もうとしましたか?投稿する。 – axiac

答えて

0

それが問題に関係しているものをMAX(timestamp)明確ではありません。ある列で一致し、他の列で異なる行を検索する場合は、JOINを使用できます。

SELECT * 
FROM tracking AS t1 
JOIN tracking AS t2 
ON t1.uuid = t2.uuid 
AND (t1.ip != t2.ip OR t1.mac != t2.mac) 
AND t1.id < t2.id 

余分t1.id < t2.id条件がt1と入れ替えt2となっ重複を防ぐことができます。

DEMO

+0

opには2つのアカウントがあります。私たちは大砲の餌です。http://stackoverflow.com/q/39352884 – Drew

関連する問題