2016-09-06 106 views
-3

我需要查找共享同一列但在其他列中具有不同值的行。我创建了一个SQL小提琴供参考。我的结果仍然是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 Fiddle是一款非常棒的产品,但它并不能代替一个写得很好的问题。例如,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条件防止重复获得与t1t2交换。

DEMO

+0

该操作有2个账号。我们只是炮灰http://stackoverflow.com/q/39352884 – Drew