2015-07-21 122 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