Buen día Tengo la tabla orden_registro donde el empleado guarda la fecha hora inicial, fecha hora final que les toma realizar un proceso. En la tabla tiempo_para se registra la fecha hora inicial, fecha hora final del tiempo de para.
Necesito hacer un Sql que me de los registros de la tabla orden_registro con 3 columnas adicionales 1.- tiempo total que toma realizar el proceso (tabla orden_registro fecha_final - fecha_inicial). 2.- tiempo de para (tabla tiempo_para) solamente el periodo de tiempo que se solapa. 3.- tiempo neto (tiempo total - tiempo de para). El tiempo de para puede afectar a uno o 2 registros de la tabla orden_registro. Ej. Tiempo de para afecta a un solo registro. El empleado X0012 registra Tabla orden_registo 2016-09-07 06:20 a 2016-09-07 06:40 en realizar el proceso 'O-15' tiempo total 20' En ese tiempo se registro Tabla tiempo_para2016-09-07 06:22 a 2016-09-07 06:25, 3' que afecta a un registro de la tabla orden_registro El resultado seria 2016-09-07 06:20:00 a 2016-09-07 06:40:00 en realizar el proceso 'O15' tiempo total 20' tiempo de para 3' tiempo total 17' Tiempo de para afecta a 2 registros Tabla orden_registo 2016-09-07 07:45:00 a 2016-09-07 08:10:00 en realizar el proceso 'O-10' tiempo total 25' 2016-09-07 08:10:00 a 2016-09-07 08:48:00 en realizar el proceso 'O-15' tiempo total 38' En ese tiempo se registro Tabla tiempo_para2016-09-07 08:03 a 2016-09-07 08:12, 9' de para, que afecta a los 2 registros El resultado seria 2016-09-07 07:45:00 a 2016-09-07 08:10:00 en realizar el proceso 'O-10' tiempo total 25' tiempo de para 7' tiempo neto 18' 2016-09-07 08:10:00 a 2016-09-07 08:48:00 en realizar el proceso 'O-15' tiempo total 38' tiempo de para 2' tiempo neto 36' Resultado esperado (disculpas si no es ligible el resultado esperado). Empleado Orden Proceso fecha Inicial Fecha final Total Para Neto X0012 8797911 O-15 2016-09-07 06:20 2016-09-07 06:40 00:20 00:03 00:17 X0012 8788288 O-15 2016-09-07 07:10 2016-09-07 07:30 00:20 00:00 00:20 X0012 8783454 O-15 2016-09-07 07:30 2016-09-07 07:45 00:15 00:00 00:15 X0012 AI-8 O-10 2016-09-07 07:45 2016-09-07 08:10 00:25 00:07 00:18 X0012 8796366 O-15 2016-09-07 08:10 2016-09-07 08:48 00:38 00:02 00:36 Hice algunos intentos utilizando generate series y Select * From t except select * Pero resulta algo engorroso. Existe alguna manera fácil de hacerlo? Scrip para generar tabla y data de ejemplo DROP TABLE IF EXISTS "trabajo_proceso"."orden_registro"; CREATE TABLE "trabajo_proceso"."orden_registro" ( "empleado_id" varchar(5) COLLATE "default", "orden" varchar(15) COLLATE "default", "operacion" varchar(4) COLLATE "default", "fecha_inicial" timestamp(6), "fecha_final" timestamp(6), "orden_registro_id" int4 DEFAULT 0 NOT NULL ) WITH (OIDS=FALSE) ; INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'ARM-8786596', 'O-15', '2016-09-07 06:00:00', '2016-09-07 06:20:00', '1'); INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'ARM-8797911', 'O-15', '2016-09-07 06:20:00', '2016-09-07 06:40:00', '2'); INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'ARM-8794746', 'O-15', '2016-09-07 06:40:00', '2016-09-07 07:00:00', '3'); INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'ARM-8789909', 'O-15', '2016-09-07 07:00:00', '2016-09-07 07:10:00', '4'); INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'ARM-8788288', 'O-15', '2016-09-07 07:10:00', '2016-09-07 07:30:00', '5'); INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'ARM-8783454', 'O-15', '2016-09-07 07:30:00', '2016-09-07 07:45:00', '6'); INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'AI-8', 'O-10', '2016-09-07 07:45:00', '2016-09-07 08:10:00', '7'); INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'ARM-8796366', 'O-15', '2016-09-07 08:10:00', '2016-09-07 08:48:00', '8'); INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'ACA-1537543', 'O-10', '2016-09-07 08:48:00', '2016-09-07 08:55:00', '9'); INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'ACA-1537441', 'O-05', '2016-09-08 10:23:00', '2016-09-08 10:27:00', '10'); INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'ACA-1537426', 'O-10', '2016-09-08 10:27:00', '2016-09-08 11:09:00', '11'); INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'ARM-8789258', 'O-15', '2016-09-08 11:09:00', '2016-09-08 11:24:00', '12'); INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'ARM-8788558', 'O-10', '2016-09-08 11:24:00', '2016-09-08 11:26:00', '13'); INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'ARM-8785940', 'O-15', '2016-09-08 11:26:00', '2016-09-08 12:23:00', '14'); INSERT INTO "trabajo_proceso"."orden_registro" VALUES ('X0012', 'ACA-1537547', 'O-11', '2016-09-08 12:23:00', '2016-09-08 12:41:00', '15'); ALTER TABLE "trabajo_proceso"."orden_registro" ADD PRIMARY KEY ("orden_registro_id"); DROP TABLE IF EXISTS "trabajo_proceso"."tiempo_para"; CREATE TABLE "trabajo_proceso"."tiempo_para" ( "empleado_id" varchar(5) COLLATE "default", "fecha_incial" timestamp(6), "fecha_final" timestamp(6) ) WITH (OIDS=FALSE) ; INSERT INTO "trabajo_proceso"."tiempo_para" VALUES ('X0012', '2016-09-07 06:22:00', '2016-09-07 06:25:00'); INSERT INTO "trabajo_proceso"."tiempo_para" VALUES ('X0012', '2016-09-07 08:03:00', '2016-09-07 08:17:00'); INSERT INTO "trabajo_proceso"."tiempo_para" VALUES ('X0012', '2016-09-08 11:12:00', '2016-09-08 11:18:00'); Saludos. Mauricio - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda