2015-07-21 63 views
2

检索的唯一用户,我有以下一组数据:查询谁相互覆盖

id changeType dateTimeStamp  userName 
1 insert  07/02/2015 0:15:53 john 
2 update  07/02/2015 0:15:52 adriana 
3 insert  07/02/2015 0:15:51 john 
4 update  07/02/2015 0:15:50 john 
5 update  07/01/2015 22:46:57 denise 

我想找回谁将覆盖则5分钟内彼此改变对方的数据的用户。对于这个特定的数据集,我应该得到的ID 1,2,和3

我想:

SELECT * 
FROM tblChanges v1 
INNER JOIN tblChanges v2 
     ON v2.userName <> v1.userName 
     AND v1.dateTimeStamp <> v2.dateTimeStamp 
WHERE ABS(TIMESTAMPDIFF(MINUTE, v1.dateTimeStamp, v2.dateTimeStamp) ) <= 5 

这也检索ID = 4,我不需要。任何帮助?

在此先感谢。

编辑:输出将

id changeType dateTimeStamp  userName 
    1 insert  07/02/2015 0:15:53 john 
    2 update  07/02/2015 0:15:52 adriana 
    3 insert  07/02/2015 0:15:51 john  

编辑:这里是DDL/DML

CREATE TABLE `tblChanges` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `changeType` VARCHAR(50) DEFAULT NULL, 
    `dateTimeStamp` DATETIME NOT NULL ON UPDATE CURRENT_TIMESTAMP, 
    `userName` VARCHAR(50) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=INNODB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 ; 

INSERT INTO tblChanges (id, changeType, dateTimeStamp, userName) 
VALUES (1, 'insert' , '2015-07-02 12:15:53', 'john') ; 

INSERT INTO tblChanges (id, changeType, dateTimeStamp, userName) 
VALUES (2, 'update' , '2015-07-02 12:15:52', 'adriana') ; 

INSERT INTO tblChanges (id, changeType, dateTimeStamp, userName) 
VALUES (3, 'insert' , '2015-07-02 12:15:51', 'john') ; 

INSERT INTO tblChanges (id, changeType, dateTimeStamp, userName) 
VALUES (4, 'update' , '2015-07-02 12:15:50', 'john') ; 

INSERT INTO tblChanges (id, changeType, dateTimeStamp, userName) 
VALUES (5, 'update' , '2015-07-01 22:46:57', 'denise') ; 
+0

你可以给你预期的输出? – Sadikhasan

+0

而不是*指定需要的列。 –

+0

如果您愿意,可以考虑遵循以下简单的两步式操作:1.如果您尚未这样做(您没有),请提供适当的DDL(和/或sqlfiddle),以便我们可以更轻松地复制问题。 2.如果您尚未这样做(再次确实没有),请提供与步骤1中提供的信息相对应的所需结果集。 – Strawberry

回答

0

你的加入是选择,而不是只有在之前和当前记录之后发生的记录, 。

推荐:

SELECT * 
FROM tblChanges v1 
INNER JOIN tblChanges v2 
     ON v2.userName <> v1.userName 
     AND v2.dateTimeStamp BETWEEN v1.dateTimeStamp AND DATE_ADD(v1.dateTimeStamp, INTERVAL 5 MINUTE) 
+0

这不提供所需的输出。如上所述,我应该检索ID 1,2和3。 – CFNinja

+0

第3行与条件不匹配 - 受第3行影响的唯一行是第1行,由同一用户完成,因此折扣。受其他人影响的三行是ID 2,3,4 - 并且影响它们的行分别是1,2和2. - 两个集合均可用于查询的输出中。 – James

+0

对不起,受排第3行影响的唯一行是我的意思。 – James