[ Foro de SQL (y MySQL) ]

problema con avg group by y limit

19-Apr-2016 17:21
Invitado (elpapa60)
4 Respuestas

problema con un avg group by y limit
Hola gusto en saludarlos
Mi problema es el siguiente
Tengo una tabla detalle _ocumento
Id, Articulo, Valor, Cantidad, Fecha
Lo que necesito es sacar el valor promedio de cada articulo yo entiendo que se que puede hacer con
Código SQL:

Ver original

   SELECT
       avg(`VALOR`) AS `valor`,
       articulo
     FROM
      detalle_documento
     GROUP BY
       articulos



el problema esta que la media la quiero obtener solo de los últimos 5 registros de cada articulo
cualquier cosa atento a sus preguntas
Gracias


23-Apr-2016 13:07
Nacho Cabanes (+31)

¿Qué gestor de bases de datos usas? En MySQL tienes LIMIT para obtener sólo una cierta cantidad de datos, y puedes usar ORDER BY para ordenar antes por algún criterio (por ejemplo, la fecha, para que sean los últimos).


25-Apr-2016 15:51
Invitado (elpapa60)

a media la quiero obtener solo de los últimos 5 registros de cada articulo

la media de los ultimos ingresos de articulo a

la media de los ultimos ingresos de articulo b

la media de los ultimos ingresos de articulo c

la media de los ultimos ingresos de articulo N

no los 5 articulos con su media total segun sus registros

espero me entienda

Se aceptan procedimientos o crear vistas , la idea de esto que esa consulta quede en una vista en mysql

= gracias por responder


30-Apr-2016 17:54
Nacho Cabanes (+31)

Vale, creo que ahora sí lo entiendo.

Por una parte, te haría falta una subconsulta para obtener los 5 últimos datos de cada artículo, que supongo que sería algo como (suponiendo que hubiera algo como "fecha" que permitiera obtenerlos en orden);

 
SELECT articulo, valor
FROM detalle_documento
WHERE (
   SELECT count(*) FROM detalle_documento AS d
   WHERE d.articulo = detalle_documento.articulo
   AND d.fecha <= detalle_documento.fecha
) <= 5;
 


Y luego eso iría dentro de la consulta global con el "group by":

 
SELECT articulo, avg(valor)
FROM ( ... ) AS subconsulta
GROUP BY articulo
 


Sin tener los CREATE TABLE y algun INSERT de prueba, no puedo comprobar que funciona, pero la lógica debería acercarse a eso.


01-May-2016 22:11
Invitado (elpapa60)

Hermano eres un maestro del sql lo unico que cambie fue

d.fecha <= detalle_documento.fecha
d.id >= detalle_documento.id

de esta forma me aseguro que siempre seran los ultimos registros

ya que el id es autonumero

te pasastes muchas gracias ( se ve tan facil jajaja despues de la guerra son todos generales)

gracias






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)