我在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的解决方案来解决这个问题。
答案 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)