如何计算两个不同行中两个值之间的差异

时间:2016-04-19 12:27:58

标签: python database postgresql

我在postgresql数据库中有一些表,其中包含以下示例的历史数据:

 log_id  |       login_time    |       logout_time       
----------+---------------------+---------------------
12885913 | 2016-03-01 05:10:59 | 2016-03-01 09:40:46
12886931 | 2016-03-01 09:41:51 | 2016-03-01 12:44:49
12887276 | 2016-03-01 12:45:54 | 2016-03-01 13:42:18

我想用下一个login_time计算每行的logout_time之间的差异,并将其保存为登录时间间隔。这个表是连接到postgresql 9.1的python脚本的结果,并从其他表中提取这些数据,我想找到一个python的解决方案来解决这个问题。

1 个答案:

答案 0 :(得分:1)

您可以使用窗口功能:

create table log_times (
    log_id int,
    login_time timestamp,
    logout_time timestamp
);

insert into log_times (log_id, login_time, logout_time) 
values 
(12885913, '2016-03-01 05:10:59', '2016-03-01 09:40:46'),
(12886931, '2016-03-01 09:41:51', '2016-03-01 12:44:49'),
(12887276, '2016-03-01 12:45:54', '2016-03-01 13:42:18')
;

select 
    *, 
    login_time - lag(logout_time) over (order by log_id) 
from log_times;

结果:

  log_id  |     login_time      |     logout_time     | ?column? 
----------+---------------------+---------------------+----------
 12885913 | 2016-03-01 05:10:59 | 2016-03-01 09:40:46 | 
 12886931 | 2016-03-01 09:41:51 | 2016-03-01 12:44:49 | 00:01:05
 12887276 | 2016-03-01 12:45:54 | 2016-03-01 13:42:18 | 00:01:05
(3 rows)