mysql-按组计算时差

提问

我有一个关于计算不同来源和目标的时差的问题.

Table1:         

Source      Target     Time                   TimeDif(wrong) (right)
1.2.3.4     2.3.4.5    2012-01-03 21:50:40    3               3
1.2.3.4     2.3.4.5    2014-01-03 21:50:43    5               5
1.2.3.4     2.3.4.5    2014-01-03 21:50:48    3               NULL
2.2.2.2     4.4.4.4    2014-01-03 21:50:51    3               4
2.2.2.2     4.4.4.4    2014-01-03 21:50:55    4               4
2.2.2.2     4.4.4.4    2014-01-03 21:50:59    4               NULL
....        ....       ......

现在,我用以下公式计算时差:

diffTime <- difftime(time[1:(length(time)-1)] , time[2:length(time)]) * -1

问题是通过计算此方法的时差不正确.这意味着该方法将计算整个列,并且不会在不同来源和目标之间做出任何决定.我不确定包(sqldf)是否可以解决此问题,以进行查询并将数据分组在一起.该查询也应实现该方法,但我认为这是不可能的.因此,如果您有任何解决方案,那就太好了.

最佳答案

假设您想在R中做一些事情,则需要一个分组功能.例如,使用dplyr的group_by可以做到:

library(dplyr)
dat %>% 
  group_by(Source, Target) %>% 
  mutate(tdif = lead(Time) - Time)

结果:

   Source  Target                Time          tdif
   <fctr>  <fctr>              <dttm>        <time>
1 1.2.3.4 2.3.4.5 2012-01-03 21:50:40 63158403 secs
2 1.2.3.4 2.3.4.5 2014-01-03 21:50:43        5 secs
3 1.2.3.4 2.3.4.5 2014-01-03 21:50:48       NA secs
4 2.2.2.2 4.4.4.4 2014-01-03 21:50:51        4 secs
5 2.2.2.2 4.4.4.4 2014-01-03 21:50:55        4 secs
6 2.2.2.2 4.4.4.4 2014-01-03 21:50:59       NA secs

请注意,第一个tdiff值比您在预期输出中指定的值大得多.这很丰富,并且由于第一个时间戳记的日期是从2012年开始,而其他时间戳记的日期是从2014年开始.

评论