2014-10-08 72 views
0

我在我的數據庫中包含的ID和DATETIME列的表分組值,這裏是一些樣本數據:MySQL的 - 基於連續的差異

ID | DATETIME 
1 | 2014-05-06 01:12 
1 | 2014-05-06 01:30 
1 | 2014-05-06 01:45 
1 | 2014-05-06 02:59 
2 | 2014-05-06 01:17 
2 | 2014-05-06 01:18 
2 | 2014-05-06 01:19 
2 | 2014-05-06 02:00 

我需要產生確定屬於該ID查詢到在其值爲DATETIME之間具有最長時間的對象,其中連續DATETIME值之間的時間不超過20分鐘。

例如,在樣本數據中,我想返回1,因爲它具有(01:12 - 01:45)DATETIME值,而在DATETIME值之間沒有20分鐘的連續差異。

謝謝。

回答

0

它看起來像你需要一個自我加入。因爲如果你有一個ID的10個條目,你的20分鐘的差距可能在條目3-6與1-4或甚至4-9之間。因此,加入的第二個實例將使用相同的ID並且具有比主要條目更高的日期時間,但少於20分鐘。然後,它可以按照時間間隔進行排序,並限制爲您想要的。例如:

select 
     YT.ID, 
     YT.DTColumn, 
     MAX(YT2.DTColumn) as MaxDateWithin20Minutes 
    from 
     YourTable YT 
     JOIN YourTable YT2 
      ON YT.ID = YT2.ID 
      AND YT.DTColumn < YT2.DTColumn 
      AND YT2.DTColumn <= date_add(YT.DTColumn, INTERVAL 20 MINUTE) 
    group by 
     YT.ID, 
     YT.DTColumn 
    order by 
     timediff(MAX(YT2.DTColumn), YT.DTColumn) DESC 
    limit 
     1 
0

您需要獲取下一個(或前一個)值並獲取時差。我認爲以下是你想要的:

select t.* 
from (select t.*, 
      (select t2.datetime 
       from table t2 
       where t2.id = t.id and t2.datetime < t.datetime 
       order by t2.datetime desc 
      ) prev_datetime 
     from table t 
    ) t 
where datetime <= prev_datetime + interval 20 minutes 
order by timestampdiff(second, prev_datetime, datetime) desc 
limit 1;