Как использовать функцию сдвига в postgres для определения разницы во времени по строкам? - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу использовать какую-то функцию сдвига в postgresql, чтобы выяснить разницу во времени по строкам.Ниже у меня есть таблица рабочих с указанием времени запуска и остановки для каждой из двух компаний.Я могу сделать это очень легко в R. Вот распечатка моего набора данных и dput для него:

print:

         id          start_time           stop_time   company   time_diff
 1: worker_1 2017-10-20 22:06:23 2017-10-20 22:09:48 company 1          NA
 2: worker_1 2017-10-20 22:28:45 2017-10-20 23:16:56 company 2  0.31583333
 3: worker_1 2017-10-20 22:37:07 2017-10-20 22:43:14 company 1 -0.66361111
 4: worker_1 2017-10-20 22:59:30 2017-10-20 23:05:52 company 1  0.27111111
 5: worker_1 2017-10-20 23:39:57 2017-10-20 23:43:00 company 1  0.56805556
 6: worker_1 2017-10-20 23:53:54 2017-10-21 00:07:27 company 1  0.18166667
 7: worker_1 2017-10-20 23:53:54 2017-10-21 00:07:27 company 1 -0.22583333
 8: worker_2 2017-10-19 18:03:43 2017-10-19 18:04:48 company 1          NA
 9: worker_2 2017-10-19 18:04:48 2017-10-19 18:05:08 company 1  0.00000000
10: worker_2 2017-10-19 18:05:51 2017-10-19 18:18:47 company 1  0.01194444
11: worker_2 2017-10-19 18:50:39 2017-10-19 21:01:14 company 1  0.53111111

dput:

structure(list(id = c("worker_1", "worker_1", "worker_1", "worker_1", 
"worker_1", "worker_1", "worker_1", "worker_2", "worker_2", "worker_2", 
"worker_2"), start_time = structure(c(1508551583, 1508552925, 
1508553427, 1508554770, 1508557197, 1508558034, 1508558034, 1508450623, 
1508450688, 1508450751, 1508453439), class = c("POSIXct", "POSIXt"
)), stop_time = structure(c(1508551788, 1508555816, 1508553794, 
1508555152, 1508557380, 1508558847, 1508558847, 1508450688, 1508450708, 
1508451527, 1508461274), class = c("POSIXct", "POSIXt")), company = c("company 1", 
"company 2", "company 1", "company 1", "company 1", "company 1", 
"company 1", "company 1", "company 1", "company 1", "company 1"
), time_diff = c(NA, 0.315833333333333, -0.663611111111111, 0.271111111111111, 
0.568055555555556, 0.181666666666667, -0.225833333333333, NA, 
0, 0.0119444444444444, 0.531111111111111)), row.names = c(NA, 
-11L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x0000000007a81ef0>)

Я создаю столбец time_diff, используя следующий код с пакетом data.table:

my_data[,time_diff:=as.numeric(
  difftime(start_time
           ,shift(stop_time, type = "lag")
           , units = "hours")
),.(id)]

Как мне повторить это в postgresql?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...