2017-05-26 10 views
-1

は、私は、IDのtask_end_timeある特定のIDのtask_end_timeの前の行であり、別の列を追加することによってテーブルを更新する必要があり、この表から以下の形式postgresqlの導入方法は?

id  task_start_time   task_end_time 
__  _______________   _____________ 
1  2017-03-21 00:09:10  2017-03-21 00:12:18 
1  2017-03-21 00:12:19  2017-03-21 00:12:56 
1  2017-03-21 00:12:57  2017-03-21 00:13:10 
2  2017-03-21 10:09:10  2017-03-21 10:25:34 
2  2017-03-21 10:25:34  2017-03-21 11:09:10 
2  2017-03-21 11:09:10  2017-03-21 11:21:39 
3  2017-03-21 12:09:10  2017-03-21 12:19:19 
3  2017-03-21 12:19:19  2017-03-21 12:29:19 
3  2017-03-21 12:29:10  2017-03-21 12:39:10 

のテーブルを持っています。

id  task_start_time   task_end_time  previous_task_end_time 

__  _______________   _____________  ______________________ 
1  2017-03-21 00:09:10  2017-03-21 00:12:18    NA 
1  2017-03-21 00:12:19  2017-03-21 00:12:56    2017-03-21 00:12:18 
1  2017-03-21 00:12:57  2017-03-21 00:13:10    2017-03-21 00:12:56 
2  2017-03-21 10:09:10  2017-03-21 10:25:34    2017-03-21 10:25:34 
2  2017-03-21 10:25:34  2017-03-21 11:09:10    2017-03-21 11:09:10 
2  2017-03-21 11:09:10  2017-03-21 11:21:39    2017-03-21 11:21:39 
3  2017-03-21 12:09:10  2017-03-21 12:19:19    2017-03-21 12:19:19 
3  2017-03-21 12:19:19  2017-03-21 12:29:19    2017-03-21 12:29:19 
3  2017-03-21 12:29:10  2017-03-21 12:39:10    2017-03-21 12:39:10 

これはpostgresqlで簡単に行うことができますか、これを実装するにはJAVAを使用する必要がありますか?どんな助けもありがとうございます。

答えて

2

window functionlagを使用してください。

SELECT id, task_start_time, task_end_time 
    , LAG(task_end_time) OVER (PARTITION BY id ORDER BY task_end_time) AS previous_task_end_time 
    FROM ... 

実行例については、SQL Fiddleを参照してください。

id task_start_time   task_end_time   previous_task_end_time 
1 2017-03-21 00:09:10  2017-03-21 00:12:18  (null) 
1 2017-03-21 00:12:19  2017-03-21 00:12:56  2017-03-21 00:12:18 
1 2017-03-21 00:12:57  2017-03-21 00:13:10  2017-03-21 00:12:56 
2 2017-03-21 10:09:10  2017-03-21 10:25:34  (null) 
2 2017-03-21 10:25:34  2017-03-21 11:09:10  2017-03-21 10:25:34 
2 2017-03-21 11:09:10  2017-03-21 11:21:39  2017-03-21 11:09:10 
3 2017-03-21 12:09:10  2017-03-21 12:19:19  (null) 
3 2017-03-21 12:19:19  2017-03-21 12:29:19  2017-03-21 12:19:19 
3 2017-03-21 12:29:10  2017-03-21 12:39:10  2017-03-21 12:29:19 
+0

多くは、簡単な質問には、これはアップデート 'にSQLを変更することで、更新のために働くん...更新試し用previous_task_end_time = LAG(task_end_time)OVER(task_end_time BYのid ORDER BY PARTITION)' – Ricky

+0

番号設定のおかげで'UPDATE mytable a SET previous_task_end_time =(SELECT MAX(b.task_end_time)FROM mytable b WHERE b.id = a.idおよびb.task_end_time Andreas

関連する問題