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

ordenar y luego agrupar

Estas en el tema de ordenar y luego agrupar en el foro de Mysql en Foros del Web. hola tengo una tabla en mysql con dos columnas una llamada num_factura y laotra llamada Fecha en el campo num_factura la factura se peude repetir ...
  #1 (permalink)  
Antiguo 27/02/2009, 08:07
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Desacuerdo ordenar y luego agrupar

hola
tengo una tabla en mysql con dos columnas
una llamada num_factura y laotra llamada Fecha

en el campo num_factura la factura se peude repetir vaias veces y cada ves ke aparezca tiene una fecha.

loq ue quiero es hacer un select donde me agrupe las factuars para que solo me la muestre una vez pero solo la ultima factura creada..


lo he hecho y me lo agrupa pero no me muestra la ultima alguien sabe como hacerlo?
nececesito ke me ordene por id descendiente y luego me lo agrupe dejandome solo una factura que ene ste caso seria la ultima creada.

lo hago asi
select * from facturas group by num_factura order by id desc

pero no me hace lo ke kiero.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com

Última edición por lexus; 27/02/2009 a las 08:21
  #2 (permalink)  
Antiguo 27/02/2009, 09:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: ordenar y luego agrupar

Prueba esta:

Código sql:
Ver original
  1. SELECT facturas.id, facturas.num_factura, facturas.fecha
  2. FROM facturas
  3. INNER JOIN (
  4.  
  5. SELECT MAX( fecha ) FECH, num_factura
  6. FROM facturas
  7. GROUP BY num_factura
  8. )t1 ON t1.num_factura = facturas.num_factura
  9. AND t1.FECH = facturas.fecha
  10. ORDER BY facturas.fecha DESC
  #3 (permalink)  
Antiguo 27/02/2009, 09:37
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: ordenar y luego agrupar

excelente muchisimas gracias ahora si me muestra los ke son:
ahora otra preguntica.. como en esa tabla facturas tengo muchas facturas y ahora cone sta consulta resultante me muestra las que quiero..
como podria hacer para que ese resultado de esa consulta me la inserte en una tabla nueva con los mismas columnas..

de esta manera tendre en una tabla nueva solo los datos que me interesan.
como seria el insert de una tabla a otra segun lo anterior..
gracias.


SELECT facturas.id, facturas.num_factura, facturas.fecha
FROM facturas
INNER JOIN (SELECT MAX(fecha) FECH, num_factura
FROM facturas
GROUP BY num_factura) t1 ON t1.num_factura = facturas.num_factura AND t1.FECH = facturas.fecha
ORDER BY facturas.fecha DESC
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #4 (permalink)  
Antiguo 27/02/2009, 09:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ordenar y luego agrupar

Buen día


Lo puedes hacer con:

insert into tabla_nueva (SELECT facturas.id, facturas.num_factura, facturas.fecha
FROM facturas
INNER JOIN (SELECT MAX(fecha) FECH, num_factura
FROM facturas
GROUP BY num_factura) t1 ON t1.num_factura = facturas.num_factura AND t1.FECH = facturas.fecha
ORDER BY facturas.fecha DESC);

Un saludo
  #5 (permalink)  
Antiguo 27/02/2009, 10:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: ordenar y luego agrupar

Como te dice huesos52, aunque si tienes id auto_increment en la tabla_nueva y quieres evitar problemas como choque de números... quítalo, pues no querrás repetir ese dato, imagino. No lo he probado.

INSERT INTO tabla_nueva (num_factura, fecha) (SELECT facturas.num_factura, facturas.fecha
FROM facturas
INNER JOIN (SELECT MAX(fecha) FECH, num_factura
FROM facturas
GROUP BY num_factura) t1 ON t1.num_factura = facturas.num_factura AND t1.FECH = facturas.fecha
ORDER BY facturas.fecha DESC);
  #6 (permalink)  
Antiguo 27/02/2009, 10:06
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: ordenar y luego agrupar

muchisimas gracias perfecto..
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #7 (permalink)  
Antiguo 03/03/2009, 08:42
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: ordenar y luego agrupar

Hola
tengo dos tablas una destino facturas2 y la otra origen trazabilidad
el codigo me qeudo asi al final

Código:
 
insert into facturas2 
(SELECT trazabilidad.id, trazabilidad.num_documento, trazabilidad.fecha_hora 
FROM trazabilidad 
INNER JOIN (SELECT MAX(fecha_hora) FECH, num_documento 
FROM trazabilidad
GROUP BY num_documento) t1 ON t1.num_documento = trazabilidad.num_documento AND t1.FECH = trazabilidad.fecha_hora
ORDER BY trazabilidad.fecha_hora DESC);

en la tabla trazabilidad tengo un campo llamado id_concepto
me gustaria adicionarle a esa consulta un where id_concepto <> 21
pero no se donde ponerla en esta consulta.. me colaboras porfavor?
gracias
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #8 (permalink)  
Antiguo 03/03/2009, 13:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: ordenar y luego agrupar

Yo lo probaría en los dos sitios
1)
insert into facturas2
(SELECT trazabilidad.id, trazabilidad.num_documento, trazabilidad.fecha_hora
FROM trazabilidad
INNER JOIN (SELECT MAX(fecha_hora) FECH, num_documento
FROM trazabilidad WHERE trazabilidad.id_concepto <> 21 GROUP BY num_documento) t1 ON t1.num_documento = trazabilidad.num_documento AND t1.FECH = trazabilidad.fecha_hora ORDER BY trazabilidad.fecha_hora DESC);

2)
insert into facturas2
(SELECT trazabilidad.id, trazabilidad.num_documento, trazabilidad.fecha_hora
FROM trazabilidad
INNER JOIN (SELECT MAX(fecha_hora) FECH, num_documento
FROM trazabilidad GROUP BY num_documento) t1 ON t1.num_documento = trazabilidad.num_documento AND t1.FECH = trazabilidad.fecha_hora WHERE trazabilidad.id_concepto <> 21 ORDER BY trazabilidad.fecha_hora DESC);

Pero para probar la bondad de cada una de ellas las pondría a prueba:
Primero lanzaría esta para ver el resultado y el tiempo
SELECT trazabilidad.id, trazabilidad.num_documento, trazabilidad.fecha_hora
FROM trazabilidad
INNER JOIN (SELECT MAX(fecha_hora) FECH, num_documento
FROM trazabilidad WHERE trazabilidad.id_concepto <> 21 GROUP BY num_documento) t1 ON t1.num_documento = trazabilidad.num_documento AND t1.FECH = trazabilidad.fecha_hora ORDER BY trazabilidad.fecha_hora DESC

y luego lanzaría esta
SELECT trazabilidad.id, trazabilidad.num_documento, trazabilidad.fecha_hora
FROM trazabilidad
INNER JOIN (SELECT MAX(fecha_hora) FECH, num_documento
FROM trazabilidad GROUP BY num_documento) t1 ON t1.num_documento = trazabilidad.num_documento AND t1.FECH = trazabilidad.fecha_hora WHERE trazabilidad.id_concepto <> 21 ORDER BY trazabilidad.fecha_hora DESC

La más rápida será la mejor.
  #9 (permalink)  
Antiguo 03/03/2009, 13:45
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: ordenar y luego agrupar

gracias...
ambas hacen exactamente lo mismo? solo varia el tiempo de ejecucion?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #10 (permalink)  
Antiguo 03/03/2009, 20:36
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: ordenar y luego agrupar

las probe ambas pero en ambos casos me dieron diferente numero de resultados.. cual de las dos es el confiable?

en 1 me dieron 40mil facturas y en la 2 me dieron 30mil facturas.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #11 (permalink)  
Antiguo 04/03/2009, 00:16
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: ordenar y luego agrupar

Creo que la segunda consulta es la adecuada (error mío por no haber comprobado las posibles diferencias), pues podría ocurrir que tras la primera consulta que controla los máximos agrupados por número de los que tienen id_concepto <> a 21, al hacer el inner join se trae los que coinciden con esos dos datos tengan o no id_concepto <> 21. Creo que esos son los 10000 de más que aparecen seleccionados en la primera consulta. La segunda selecciona los máximos por número y luego hace la búsqueda de los que tengan id_concepto <> 21. Pero debes comprobar los datos tú. Revisa el listado obtenido de la primera consulta mostrando id_concepto y verás que alguno puede ser igual a 21, o haz alguna consulta de comprobación. Por ej. podías unir mediante left join las dos consultas de select y buscar campos null de la segunda consulta, para de ese modo ver ver cuáles son las diferencias y comprobar si esos datos diferentes están bien o mal, o más rápida, poner dos where, uno con trazabilidad.id_concepto <> 21 en la consulta interior y otro con where trazabilidad.id_concepto = 21 en la exterior, ambos a la vez, y si tienes 10000 ya sabes que hay un problema y que la segunda es la buena.

Última edición por jurena; 04/03/2009 a las 01:39
  #12 (permalink)  
Antiguo 12/03/2009, 06:47
Avatar de nixspatin  
Fecha de Ingreso: mayo-2008
Mensajes: 113
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: ordenar y luego agrupar

excelente post!!!! me ha ayudado muchisimo!!!
  #13 (permalink)  
Antiguo 18/07/2011, 11:04
 
Fecha de Ingreso: julio-2011
Mensajes: 1
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: ordenar y luego agrupar

A mi se me ha solucionado el problema simplemente con esto:
Código MySQL:
Ver original
  1. SELECT * FROM facturas GROUP BY num_factura ORDER BY MAX(fecha) DESC
Probadlo en vuestras tablas ya que es mucho más simple que las soluciones propuestas antes.

Un saludo
  #14 (permalink)  
Antiguo 08/02/2013, 11:53
 
Fecha de Ingreso: marzo-2011
Mensajes: 6
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: ordenar y luego agrupar

Hola a Todos,
Yo tambien tengo el mismo problema con mi consulta, que es la siguiente:

Código:
SELECT vend.Empresa,vend.contacto,vend.Fecha,vend.nfactura,vend.v_vendidos,MAX(vend.f_guion)  ,vend.fechadeenviosdatos, vend.Tipocomunicacion,vend.Evento, vent.nombrevendedor, vent.apellidopaterno,vend.Estado,vend.hora_estado,vent.tipo_usuario,vent.login,vend.nfactura,vend.ventasfacturadas,vend.seg_empresa FROM vendedores vend

INNER JOIN ventas vent ON vend.idvendedor = vent.idvendedor

WHERE vend.Empresa like '%$Empresa%' group by vend.Empresa order by vend.Empresa ASC,MAX(vend.f_guion) DESC
Quisera agrupalo por empresa y ordenarlo de manera DESC.

Gracias de ante mano.

Saludos Cordiales,
Giancarlo
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:43.