PostgreSQL:如何在两个不同列中的两个连续行中减去日期?

时间:2017-10-23 09:13:02

标签: postgresql timestamp subtraction

我需要相互减去两个日期(start_time(n + 1)-end_time(n)),这两个日期分为两个不同的行和列,分区为id。请看下表:

row |id|    Start_time       |      end_time
----+--+---------------------+------------------------
 1  |14|"2012-06-16 21:43:00"|"2012-06-16 23:54:00"
 2  |14|"2012-06-19 13:09:00"|"2012-06-19 23:59:00"
 3  |21|"2016-04-12 14:46:00"|"2016-04-25 13:55:00"
 4  |21|"2016-04-20 09:35:00"|"2016-04-20 22:00:00"
 5  |24|"2011-09-19 19:20:00"|"2011-09-19 22:15:00"
 6  |24|"2011-09-20 19:01:00"|"2011-09-22 14:05:00"
 7  |30|"2009-10-21 07:25:00"|"2009-10-21 10:59:00"
 8  |30|"2009-10-27 16:01:00"|"2009-11-10 16:00:00"
 9  |30|"2009-10-28 08:13:00"|"2009-10-28 23:59:00"
10  |36|"2015-11-23 12:21:00"|"2015-11-23 15:19:00"

示例:对于id = 14,我需要从第2行的start_time中减去第1行中的end_time,并将结果存储在新列中。我的主要目的是找到每个ID的每个测量之间的时间差。 它有可能吗?

我的首选结果就像差异列:

row |id|    Start_time       |      end_time       |   diff   
----+--+---------------------+---------------------+------------
 1  |14|"2012-06-16 21:43:00"|"2012-06-16 23:54:00"| 
 2  |14|"2012-06-19 13:09:00"|"2012-06-19 23:59:00"|"2 days 13:15:00"
 3  |21|"2016-04-12 14:46:00"|"2016-04-25 13:55:00"|
 4  |21|"2016-04-20 09:35:00"|"2016-04-20 22:00:00"|"-5 days -04:20:00"
 5  |24|"2011-09-19 19:20:00"|"2011-09-19 22:15:00"|
 6  |24|"2011-09-20 19:01:00"|"2011-09-22 14:05:00"|"20:46:00"

0 个答案:

没有答案