Podes reunirlos de esta manera: select extract(epoch from o.fecha_final-fecha_inicial)/60, * from orden_registro o inner join tiempo_para t on o.empleado_id=t.empleado_id and ( t.fecha_incial between o.fecha_inicial and o.fecha_final or t.fecha_final between o.fecha_inicial and o.fecha_final )
te dejo el cálculo de restar la segunda parte que lo podes hacer por ejemplo con algunos case when El 9 de septiembre de 2016, 19:46, mauricio pullabuestan < jmaurici...@yahoo.es> escribió: > 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 >