2017-05-26 2 views
-1

Ich habe eine Tabelle in das unten stehende FormatWie in Postgresql führen?

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 

aus dieser Tabelle Ich brauche die Tabelle zu aktualisieren, indem Sie eine weitere Spalte hinzugefügt, die die vorherige Zeile der jeweiligen ids task_end_time ist, die die task_end_time der ID ist.

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 

Also kann dies leicht in postgresql getan werden oder sollte ich JAVA verwenden, um dies zu implementieren? Jede Hilfe wird geschätzt.

Antwort

2

Verwenden Sie 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 ... 

Siehe SQL Fiddle zum Beispiel ausgeführt wird.

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

Vielen Dank eine kurze Frage dies für Update funktioniert funktioniert, indem die SQL in 'Update zu ändern ... previous_task_end_time = LAG (task_end_time) OVER (PARTITION BY id ORDER BY task_end_time)' – Ricky

+0

Nr Für eine Update-Versuch eingestellt 'UPDATE mytable ein SET previous_task_end_time = (SELECT MAX (b.task_end_time) FROM Meine Tabelle b WHERE b.id = a.id UND b.task_end_time Andreas