Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta mysql con maximo y agrupado

Estas en el tema de Consulta mysql con maximo y agrupado en el foro de Mysql en Foros del Web. saludos a todos, esta es mi primer mensaje, necesito por favor me puedan ayudar con una consulta mysql tengo una tabla tramite que consta de ...
  #1 (permalink)  
Antiguo 24/10/2012, 21:13
 
Fecha de Ingreso: octubre-2012
Mensajes: 9
Antigüedad: 11 años, 6 meses
Puntos: 0
Consulta mysql con maximo y agrupado

saludos a todos,
esta es mi primer mensaje, necesito por favor me puedan ayudar con una consulta mysql
tengo una tabla tramite que consta de codigo, tipo,documento, fecha y tramite, de ahi quiero obtener la fecha maximo y que codigo le corresponde.
mas o menos estoy haciendo algo como esto:

Código MySQL:
Ver original
  1. select fechaTramite,x.maxim,codigoTramite,numeroDoc,tipoDoc,numeroPago, tipoTramite,areaOrigen,areaDestino
  2.  from Tramite t, (select max(fechaTramite) as maxim from Tramite group by numeroDoc,tipoDoc,numeroPago) as x
  3. where (tipoTramite='Registrado' ) and areaDestino='22' and fechaTramite =x.maxim
  4. group by numeroDoc,tipoDoc,numeroPago
  5. order by fechaTramite;
la consulta en si trata de un sistema de tramite documentario que en este caso mostraria la lista de documentos registrados en el sistema, se muestra los registros 'Registrados' al area 22, pero no doy con encontrar la fecha maxima de cualquier tipo de tramite (registrado,derivado) pero de un documento en especial
de antemano gracias.

Última edición por gnzsoloyo; 25/10/2012 a las 04:28 Razón: Sin etiquetado de codigo
  #2 (permalink)  
Antiguo 25/10/2012, 01:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta mysql con maximo y agrupado

Código MySQL:
Ver original
  1. select t.fechaTramite,
  2.           t.codigoTramite,
  3.           t.numeroDoc,
  4.           t.tipoD oc,
  5.           t.numeroPago,
  6.           t.tipoTramite,
  7.           t.areaOrigen,
  8.           t.areaDestino
  9.    (SELECT t2.fechaTramite,
  10.           t2.codigoTramite,
  11.           t2.numeroDoc,
  12.           t2.tipoD oc,
  13.           t2.numeroPago,
  14.           t2.tipoTramite,
  15.           t2.areaOrigen,
  16.           t2.areaDestino
  17.        FROM Tramite t2
  18.        where t2.tipoTramite='Registrado'
  19.            and t2.areaDestino='22') as t
  20.  (select t1.numeroDoc,
  21.             t1.tipoDoc,
  22.             t1.numeroPago,
  23.             max(t1.fechaTramite) as maxim
  24.        from Tramite t1
  25.        where t1.tipoTramite='Registrado'
  26.            and t1.areaDestino='22'
  27.        group by t1.numeroDoc,
  28.                       t1.tipoDoc,
  29.                       t1.numeroPago) as x
  30.   ON t.fechaTramite=x.maxim
  31.        and t.numeroDoc=x.numeroDoc
  32.        and t.tipoDoc=x.tipoDoc
  33.        and t.numeroPago=x.numeroPago
  34. order by t.fechaTramite;

Creo?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 25/10/2012, 13:56
 
Fecha de Ingreso: octubre-2012
Mensajes: 9
Antigüedad: 11 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Consulta mysql con maximo y agrupado

GRACIASSS por tu pronta respuesta quimfv...
Modifique algo tu consulta

Código MySQL:
Ver original
  1. SELECT t.fechaTramite, t.codigoTramite,
  2.               t.numeroDoc, t.tipoD oc,
  3.               t.numeroPago,t.tipoTramite,
  4.               t.areaOrigen,t.areaDestino
  5.        (SELECT t2.fechaTramite, t2.codigoTramite,
  6.               t2.numeroDoc, t2.tipoD oc,
  7.               t2.numeroPago,t2.tipoTramite,
  8.               t2.areaOrigen,t2.areaDestino
  9.            FROM Tramite t2
  10.            WHERE t2.tipoTramite='Registrado' AND t2.areaDestino='22') as t
  11.      (SELECT t1.numeroDoc, t1.tipoDoc, t1.numeroPago,
  12.                 max(t1.fechaTramite) as maxim
  13.            FROM Tramite t1
  14.            GROUP BY t1.numeroDoc, t1.tipoDoc, t1.numeroPago) as x
  15.       ON t.fechaTramite=x.maxim
  16.            AND t.numeroDoc=x.numeroDoc
  17.            AND t.tipoDoc=x.tipoDoc
  18.            AND t.numeroPago=x.numeroPago
  19. ORDER BY t.fechaTramite

Lo probe y me funciona, graciassssssssssssss millllllll..que digo diez milllllllllllll...espero que se aplique a todos los casos...jejee
es que antes igual cree y me funciono...de todas maneras estare monitoreando.

besos, abrazos, puntos...gracias.

Última edición por gnzsoloyo; 26/10/2012 a las 04:21 Razón: Sin etiquetado de fuente.
  #4 (permalink)  
Antiguo 25/10/2012, 14:02
 
Fecha de Ingreso: octubre-2012
Mensajes: 9
Antigüedad: 11 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Consulta mysql con maximo y agrupado

Ahhh... se me olvido decir que modifique la consulta porque necesitaba obtener la fecha de tramite maxima de cualquier documento en cualquier fase, si esta coincidia con la fecha de la fase de 'Registrado' que se muestre y si no, que no se muestre, si sin la modificacion obtengo la fecha de tramite maxima pero de documentos en fase Registrado.
  #5 (permalink)  
Antiguo 28/11/2012, 20:21
 
Fecha de Ingreso: octubre-2012
Mensajes: 9
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Consulta mysql con maximo y agrupado

Saludos amigos del forosdelweb,
En el transcurso de estos dias desde la fecha que escribi, he dejado al usuario de tramite probando la consulta con la modificacion que le hice.
He tenido quejas de ellos, diciendo que es muy lenta la consulta, lo he probado en mi maquina y la consulta me demora como 4 segundos al hacer una busqueda, mientras que en la maquina del usuario (que es una maquina mas anticuchita) demora de 8 a 10 segundos.
El tiempo es demasiado considerando que los registros se procesan sucesiva y continuamente, y el tiempo que demora es alto.
Habria alguna manera de optimizar la consulta???
Se aceptan todas las sugerencias. Muchas gracias desde ya.
  #6 (permalink)  
Antiguo 29/11/2012, 03:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta mysql con maximo y agrupado

¿Qué indices has creado sobre esa tabla?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 29/11/2012, 09:57
 
Fecha de Ingreso: octubre-2012
Mensajes: 9
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Consulta mysql con maximo y agrupado

Saludos y gracias por responder gnzsoloyo,
Mi tabla TRAMITE solo tiene un indice: CODTRA. Que practicamente es un numero entero y secuencial. Basicamente la estructura de mi tabla es como sigue:
CODTRA : numero entero y clave principal de mi tabla
coddoc: codigo del documento. clave foranea a la tabla DOCUMENTO
tipope: tipo de operacion: registrado o derivado
fectra: fecha de tramite
areori: codigo de area origen. clave foranea a tabla AREA
usuori: codigo de usuario origen. clave foranea a tabla USUARIO
aredes: codgo area destino. clave foranea a tabla AREA
usudes: codigo usuario destino. clave foranea a tabla USUARIO
foladj: cantidad de folios

Bueno, y esa es la estructura de mi tabla TRAMITE.
Por fasssss...una ayudita.
  #8 (permalink)  
Antiguo 29/11/2012, 11:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta mysql con maximo y agrupado

Tienes tres indices a crear

tipoTramite
areaDestino
fechaTramite

que pueden mejorar el rendimiento

Código MySQL:
Ver original
  1. ALTER TABLE `TRAMITE` ADD INDEX `ind_tipoTramite`(`tipoTramite`);
  2. ALTER TABLE `TRAMITE` ADD INDEX `ind_areaDestino`(`areaDestino`);
  3. ALTER TABLE `TRAMITE` ADD INDEX `ind_tipoTramite`(`fechaTramite`);

Fijate que los indices que te recomiendo son sobre los campos que intervienen en WHERE y en ON.

Lee aqui como se fuerza el uso de indices si con el propio hecho de crearlos no mejora el rendimiento
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #9 (permalink)  
Antiguo 29/11/2012, 19:45
 
Fecha de Ingreso: octubre-2012
Mensajes: 9
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Consulta mysql con maximo y agrupado

Muchas gracias por tu pronta respuesta nuevamente quimvf,
Leo, modifico, lo pruebo y les comento.

Gracias.
  #10 (permalink)  
Antiguo 02/12/2012, 09:34
 
Fecha de Ingreso: octubre-2012
Mensajes: 9
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Consulta mysql con maximo y agrupado

Disculpa, gnzsoloyo, pero no entendi tu comentario, esta relacionado con mi tema?.
es que no veo ningun GROUP BY ... WITH ROLLUP, ni ningun IF.
  #11 (permalink)  
Antiguo 09/12/2012, 14:55
 
Fecha de Ingreso: octubre-2012
Mensajes: 9
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Consulta mysql con maximo y agrupado

Saludos amigos del foro,

Estuve probando lo que me sugirieron, eso de crear nuevos indices a mi tabla tramite, lo probe aproximadamente 2 semanas, pero aparecio un problemilla, bueno por un lado mis usuarios no ven mejorada la rapidez en la consulta, y por otro lado, me esta generando un problema que luego de mucho revisar es que me esta generando indices duplicados de codigo tramite, antes este como era unico, no habia problema, porque en mi proceso utilizaba el codigo de tramite para ubicar un documento, ahora como este codigo de tramite no es un indice unico sino que agregue otros indices mas....pos me ha estado cruzando los registros...buuuu...que debo hacer.
bueno lo primero solucionar estos codigos de tramite duplicados y luego cambiar nuevamente la tabla a un unico indice que es codigo de tramite.


Ayuda por favor...o que hice mal que no me sale...:(
  #12 (permalink)  
Antiguo 10/12/2012, 02:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta mysql con maximo y agrupado

Creo que tienes una confusión de conceptos.

Una cosa son los indices y otra es la clave principal de una tabla. La clave principal de una tabla debe ser unica y tener valores unicos y tiene asociado un indice. Es el valor que identifica al registro.

Eso no tiene dada que ver con los otros indices que puedas crear, estos pueden ser varios y tener como característica que los valores sean unicos (en este caso serian claves alternativas) o no.

Un indice es un "objeto" que ayuda al motor en el momento de hacer busquedas ya que este, el motor, para encontrar algo en la tabla no tiene que leerla entera si no que va directamente a los datos buscados sin leerla des de el principio....hay de distintos tipos de valores unicos o no como ya te he dicho y por su estructura los de tipo arbol (BTree) o Hash. Segun las caracteristicas de tus datos debes elegir uno u otro, el factor mas determinante es la dispersión de datos que tenga el campo sobre el que creas el indice.

7.4.5. Cómo utiliza MySQL los índices

13.1.4. Sintaxis de CREATE INDEX
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 10/12/2012 a las 02:30
  #13 (permalink)  
Antiguo 10/12/2012, 14:53
 
Fecha de Ingreso: octubre-2012
Mensajes: 9
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Consulta mysql con maximo y agrupado

Upsss.......Disculpen mi ignorancia. me pondre a leer los link que me enviaron. Perdon nuevamente. Gracias por la informacion.

Etiquetas: agrupado, maximo, registros, select, sql, tabla, tipo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:14.