Ir al contenido



Foto

Obteniendo datos de los últimos 12 meses en Firebird


  • Por favor identifícate para responder
8 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 30 junio 2017 - 02:36

Pues eso mis estimados, tengo la siguiente consulta:


sql
  1. SELECT SUM(COALESCE(ins_cantidad,0)) AS total,
  2. CASE EXTRACT(MONTH FROM CAST(ins_fecha AS DATE))
  3. WHEN 1 THEN 'ENERO ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  4. WHEN 2 THEN 'FEBRERO ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  5. WHEN 3 THEN 'MARZO ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  6. WHEN 4 THEN 'ABRIL ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  7. WHEN 5 THEN 'MAYO ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  8. WHEN 6 THEN 'JUNIO ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  9. WHEN 7 THEN 'JULIO ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  10. WHEN 8 THEN 'AGOSTO ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  11. WHEN 9 THEN 'SEPTIEMBRE ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  12. WHEN 10 THEN 'OCTUBRE ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  13. WHEN 11 THEN 'NOVIEMBRE ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  14. WHEN 12 THEN 'DICIEMBRE ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  15. END AS fecha
  16. FROM insumos_saldos
  17. WHERE CAST(ins_fecha AS DATE) BETWEEN dateadd(MONTH,-12,CURRENT_DATE) AND dateadd(MONTH,-1,CURRENT_DATE) AND ins_tipo_saldo IN ('S','SA') AND ins_id = 1
  18. GROUP BY EXTRACT(MONTH FROM ins_fecha), EXTRACT(YEAR FROM ins_fecha )
  19. ORDER BY EXTRACT(YEAR FROM ins_fecha) ASC

Funciona correctamente, obtengo los despachos de un items de los últimos 12 meses sin incluir el mes actual, mi problema radica en que no puedo obtener los meses donde no hubo movimientos, ejemplo:

 

50 - Diciembre 2016

25 - Enero 2017

30 - Mayo 2017

 

Debería ser:

 

0 - Junio 2016

0 - Julio 2016

0 - Agosto 2016

0 - Septiembre 2016

0 - Octubre 2016

0 - Noviembre 2016

50 - Diciembre 2016

25 - Enero 2017

0 - Febrero 2017

0 - Marzo 2017

0 - Abril 2017

30 - Mayo 2017

 

Sé que se debería hacer a través de Stored Procedure, pero aún no domino ese tipo de complejidad.

 

Saludos.


  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.128 mensajes
  • LocationMéxico

Escrito 30 junio 2017 - 03:44

Hola amigo

 

Que quiere decir esto:


sql
  1. AND ins_tipo_saldo IN ('S','SA') AND ins_id = 1

Me parece que los tiros van por ahí

 

Saludos


  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 30 junio 2017 - 03:50

S Y SA son los tipos de salidas que le interesan y ins_id es el codigo del item que quiero obtener sus movimimientos.
  • 1

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.128 mensajes
  • LocationMéxico

Escrito 30 junio 2017 - 04:10

S Y SA son los tipos de salidas que le interesan y ins_id es el codigo del item que quiero obtener sus movimimientos.

 

Pues ese es el asunto, no hay coincidencias y por eso no se muestran.

 

Saludos


  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 30 junio 2017 - 04:24

Eso es correcto mi estimado, ese es el detalle,que aunque no haya coincidencias quiero me muestre como el ejemplo del primer post.
  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 01 julio 2017 - 01:38

Buscando por ahí recordé que tenía algo muy similar y lo acotejé en un SP que queda así:

sql
  1. CREATE OR ALTER PROCEDURE INSUMO_MOVEMENTS_STAT (
  2. INSUMO INTEGER)
  3. RETURNS (
  4. MES VARCHAR(30) CHARACTER SET ISO8859_1,
  5. TOTAL FLOAT)
  6. AS
  7. DECLARE variable A_MES INTEGER;
  8. BEGIN
  9. A_MES = 1;
  10.  
  11. while (A_MES <= 12) do
  12. BEGIN
  13. SELECT SUM(COALESCE(ins_cantidad,0)) AS total,
  14. CASE EXTRACT(MONTH FROM ins_fecha)
  15. WHEN 1 THEN 'ENERO ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  16. WHEN 2 THEN 'FEBRERO ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  17. WHEN 3 THEN 'MARZO ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  18. WHEN 4 THEN 'ABRIL ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  19. WHEN 5 THEN 'MAYO ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  20. WHEN 6 THEN 'JUNIO ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  21. WHEN 7 THEN 'JULIO ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  22. WHEN 8 THEN 'AGOSTO ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  23. WHEN 9 THEN 'SEPTIEMBRE ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  24. WHEN 10 THEN 'OCTUBRE ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  25. WHEN 11 THEN 'NOVIEMBRE ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  26. WHEN 12 THEN 'DICIEMBRE ' || ' ' || EXTRACT(YEAR FROM ins_fecha)
  27. ELSE 'DESCONOCIDO'
  28. END AS fecha
  29. FROM insumos_saldos
  30. WHERE EXTRACT(MONTH FROM ins_fecha) = dateadd(MONTH, :A_MES * (-1),CURRENT_DATE) AND ins_tipo_saldo IN ('S','SA') AND ins_id = :INSUMO
  31. GROUP BY EXTRACT(MONTH FROM ins_fecha), EXTRACT(YEAR FROM ins_fecha ) INTO :total, :mes;
  32.  
  33. /*Seguimos al siguiente mes*/
  34. A_MES = A_MES + 1;
  35. suspend;
  36. END
  37. END

Todo compila sin problemas, el detalle es que al ejecutarle me aparece un error de conversión que no le encuentro la causa:

delphi
  1. conversion error from string "6"
  2. at procedure 'INSUMO_MOVEMENTS_STAT' Line: 13, Col:7.


  • 0

#7 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 mensajes
  • Location127.0.0.1

Escrito 01 julio 2017 - 01:47

Disculpa la intromision.

 

Si reflejas los datos hacia un GRID, antes llevalos a una Tabla Virtual y luego utilizando un ID de los registros obtenidos, solo cambia los valores que salgan, es decir.

 

Llenalas con 0 y mediante su ID solo remplaza los Registros que hagan un Match de tu consulta.

 

Solo es una alternativa, para que no hagas un cambio a lo largo de tu codigo en Firebird.   Es un metodo algo primitivo, pero es el resultado que creo que buscas.

 

Saludos!


  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 02 julio 2017 - 08:55

Gracias Sir.Dev.A.Lot, en realidad no se mostrarán en un Grid sino que es para fines de graficación.

Saludos.


  • 0

#9 traka

traka

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 27 diciembre 2017 - 01:22

Buen dia , soy nuevo en este foro , me podrian orientar , donde puedo publicar una pregunta y me puedan ayudar? 

 

Gracias.


  • 0