Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   evitar que el DISTINCT me incluya lo que llamo en el INNER JOIN (https://www.clubdelphi.com/foros/showthread.php?t=82510)

lmpadron 13-03-2013 22:35:29

evitar que el DISTINCT me incluya lo que llamo en el INNER JOIN
 
Saludos comunidad

Estoy teniendo grandes dificultades con una sentencia MySQL sucede que necesito Obtener todas las Ordenes de un Convenio que no se repitan en un mismo turno en un dia. Esto se me ha complicado bastante. Aquí les dejo la composición de mi tabla orden_esquema.

Código SQL [-]
Field    Type    Null  Key  Default    Extra
id_esquema  int(10)unsigned  NO  PRI  auto_increment
norma    varchar(45)  YES      
npr    varchar(45)  YES      
rendimiento  varchar(45)  YES      
distribucion  varchar(45)  YES      
ttrabajo  varchar(10)  YES      
ton    varchar(45)  YES      
orden    varchar(45)  YES      
turno    varchar(45)  YES      
fecha    date    NO      
convenio  varchar(45)  NO      
tinterrupcion  varchar(10)  YES      
causa_int  varchar(5)  YES      
tipo    varchar(45)  NO


Estoy tratando con algo similar a esto

Código SQL [-]
SELECT distinct o.fecha, o.turno, e.* FROM orden_esquema o
inner join orden_esquema e on o.id_esquema = e.id_esquema
where o.convenio = '1';

Pero como tambien toma el INNER JOIN en el DISTINCT siempre me muestra todas las ordenes del convenio 1. Entonces como puedo evitar que el DISTINCT me incluya lo que llamo en el INNER (e.*) para que me muestre los datos que necesito pero me mantenga la condición de que o.fecha y o.turno sean distintos. Por supuesto esta es laforma enq ue creo se pueda hacer, si ustedes lo han logrado en situaciones similares de otra forma estaria encantado de escucharla !!! :D :D :D :D

Aqui les dejo el Script SQL con la definicion de la tabla y los datos que tengo en este momento. Uso MySQL 5.0.77

Código SQL [-]
--
-- Create schema ventabuque
--

CREATE DATABASE IF NOT EXISTS ventabuque;
USE ventabuque;

--
-- Definition of table `orden_esquema`
--

DROP TABLE IF EXISTS `orden_esquema`;
CREATE TABLE `orden_esquema` (
  `id_esquema` int(10) unsigned NOT NULL auto_increment,
  `norma` varchar(45) default NULL,
  `npr` varchar(45) default NULL,
  `rendimiento` varchar(45) default NULL,
  `distribucion` varchar(45) default NULL,
  `ttrabajo` varchar(10) default NULL,
  `ton` varchar(45) default NULL,
  `orden` varchar(45) default NULL,
  `turno` varchar(45) default NULL,
  `fecha` date NOT NULL,
  `convenio` varchar(45) NOT NULL,
  `tinterrupcion` varchar(10) default NULL,
  `causa_int` varchar(5) default NULL,
  `tipo` varchar(45) NOT NULL,
  PRIMARY KEY  (`id_esquema`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `orden_esquema`
--

/*!40000 ALTER TABLE `orden_esquema` DISABLE KEYS */;
INSERT INTO `orden_esquema` (`id_esquema`,`norma`,`npr`,`rendimiento`,`distribucion`,`ttrabajo`,`ton`,`orden`,`turno`,`fecha`,`c  onvenio`,`tinterrupcion`,`causa_int`,`tipo`) VALUES 
 (1,'1052300175','169','169','0-0-10-0-0-0','7.3308','1000','1','1','2013-03-11','1','0',NULL,'barco'),
 (2,'1611124061','110','120','1-14-6-0-0-2','7.3308','1000','2','1','2013-03-11','1','0',NULL,'barco'),
 (3,'3010685011','110','120','1-0-10-0-0-0','7.3308','120','3','1','2013-03-11','2','0',NULL,'monta'),
 (4,NULL,NULL,NULL,NULL,'7.3308',NULL,'4','1','2013-03-11','2','0',NULL,'a tiempo');
/*!40000 ALTER TABLE `orden_esquema` ENABLE KEYS */;

Gracias de antemano

VictorPenyalver 14-03-2013 15:48:20

Group by
 
Has probado agrupando por fecha, turno y el resto de campo que quieras visualizar en el select?

Código SQL [-]

SELECT o.fecha, o.turno, o.orden
FROM orden_esquema o
WHERE (o.convenio = '1') 
GROUP BY o.fecha, o.turno, o.orden

lmpadron 14-03-2013 16:58:20

Cita:

Empezado por VictorPenyalver (Mensaje 456769)
Has probado agrupando por fecha, turno y el resto de campo que quieras visualizar en el select?


Bueno eso no se me había ocurrido :) pero una ves probado ha dado el resultado esperado. sin embargo al usar un COUNT(*) me cuenta todos los registros, los que se ven y los que no. Me imagino esto sea por el funcionamiento del GROUP BY. Pero bueno pero esto ya es para otro Post.
Una pregunta un POST -> Guia de Estilo !!! ;)

Gracias por la ayuda !!!

VictorPenyalver 14-03-2013 17:07:06

Que quieres contar exactamente?

lmpadron 14-03-2013 17:09:15

Cita:

Empezado por VictorPenyalver (Mensaje 456778)
Que quieres contar exactamente?

Aqui esta el post


La franja horaria es GMT +2. Ahora son las 06:12:15.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi