mysql - 按组计算时间差

标签 mysql sql r analytics

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

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 年。

关于mysql - 按组计算时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40440568/

相关文章:

php - Laravel 数据库连接超时但可以通过 mysql 命令连接

mysql - 如何创建 MySQL 触发器,用于在插入或更新后使用另一个表中字段的数据更新表的总和

regex - 通过融合和 reshape 包重新使用 colsplit 正则表达式切割列

datetime - 计算R中2个日期之间的工作日数

r - R中的空间最近邻分配

mysql复杂查询运行中

php - 有没有办法将事件处理函数附加到 mysql 错误?

sql - 为 SQL 表类型插入批量记录时获取 SCOPE_IDENTITY 值

java - 如何使用 session 工厂从 Java Hibernate 执行 sql 存储过程?

sql - 根据观察结果创建稀疏矩阵