#1
|
|||
|
|||
select
Buenas..
Quiero saber cual es el potencial de las select, pues pretendo hacer esta consulta. select sum(campo_cantidad), distinct (campofecha+4(2)) from tabla where condiciones. he intentado varias cosas, pero sin exito.. ¿Alguien sabe como realizarlo usando Select? |
#2
|
||||
|
||||
No sé a qué te refieres exáctamente con "el potencial", pero te cuento:
No tengo ni idea de cómo hacerlo en una sóla orden pero puedes meterlo dentro de un SELECT - END SELECT. Esto ralentiza un poco la búsqueda, pero salvo que sean cientos de miles de registros tampoco tiene mucha importancia. La idea sería esto: select campo_cantidad, campofecha from tabla where condiciones. at new campofecha+4(2)) ir sumando campo_cantidad en una variable endat endselect Algo así no sé. Espero que te sirva de ayuda o al menos que no te haya liado más.
__________________
Un saludo |
#3
|
||||
|
||||
Hola,
Posiblemente se pueda llegar a conformar una frase en "open SQL" empleando SELECT para que en una sola frase se obtenga todo el efecto requerido (filtrado por condición y acumulación en cambio del valor de una parte del campo de fecha). Mi experiencia es que las frases open SQL complejas pueden resultar muy ineficientes. Imagino que el pseudo-compilador que traduce de open SQL al SQL real de la base de datos (Oracle, MySQL, Informix o la que se esté empleando) no necesariamente produce el código SQL real mas eficiente. Resulta mejor no ponerle las cosas tan dificiles al traductor y darle varias frases mas claras y menos ambiciosas. Como ejemplo, una frase con join de varias tablas (una de las cuales tiene mas de un millón de registros) estaba llevando a que el programa que la empleaba durara mas de 3 dias continuos (pasó de 80 horas sin terminar). Cuando dividimos la frase en varias frases equivalentes llevamos el tiempo a 10 o 12 horas. Supongo que es como muchas cosas en la vida: El que mucho abarca, poco aprieta |
#4
|
|||
|
|||
Muchas gracias por vuestras aportaciones, yo lo he resuelto asi, pero esperaba, que alguien me indicará la funciones (avg, max, min....month, day, etc) que puede tener el select en este lenguaje.
REFRESH t_anep. error = 0. SELECT * INTO CORRESPONDING FIELDS OF e_anep FROM anep WHERE bukrs = t_anla-bukrs AND anln1 = t_anla-anln1 AND anln2 = t_anla-anln2 AND gjahr = e_cuadro-gjahr AND afabe = 01. e_anep-mesbzdat = e_anep-bzdat+4(2). APPEND e_anep TO t_anep. v_invers = 0. ENDSELECT. IF sy-subrc <> 0. error = 1. ENDIF. sumanbtr = 0. SORT t_anep. LOOP AT t_anep INTO e_anep. IF v_mes = e_anep-bzdat+4(2). sumanbtr = sumanbtr + e_anep-anbtr. ENDIF. ENDLOOP. |
#5
|
||||
|
||||
mas performance
la solucion que encontraste es buena, pero seria mucho mas performante si en vez de hacer un
SELECT * FROM tabla INTO CORRESPONDING FIELDS OF i_tabla WHERE (condiciones) ENDSELECT. haces un SELECT (solo los campos que necesitas) FROM tabla INTO TABLE i_tabla (tabla definida con solo los campos que necesitas en el orden que los seleccionas) WHERE (condiciones). y luego loopeas por i_tabla sumando tus totales. Espero esto te sirva.... Saludos! Pablo. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|