SELECT SUM(lineasfacturascli.cantidad)
FROM lineasfacturascli inner join facturascli on facturascli.idfactura = lineasfacturascli.idfactura
WHERE lineasfacturascli.referencia = '027006' and facturascli.codalmacen = 'ALG' and
facturascli.fecha+facturascli.hora > '2013-04-09T12:59:58' and
facturascli.fecha+facturascli.hora <= '2013-04-12T00:00:00'
GROUP BY lineasfacturascli.referencia
CREATE INDEX facturascli_cms_calc_facturasON facturascliUSING btree(codalmacen, fecha, hora);
CREATE INDEX lineasfacturascli_cmsON lineasfacturascliUSING btree(idfactura, referencia);
Una cosa que sí he notado es un error en el índice que pretendes
crear. Has puesto (codalmacen, fecha, hora), cuando deberías haber
puesto (codalmacen, fecha+hora) ya que el campo que estás comparando
está calculado. Debes indexar el cálculo.
--
Por otra parte si el indice lo creas ((fecha+hora), codalmacen) será más optimo puesto que el campo que más varia es el de fecha por lo que el indice estará más optimizado para tus búsquedas descartando los registros que no cumplan el where con mayor celeridad.
Me interesa, José Antonio. No tenemos intención de cambiar de base de datos.
Gracias de nuevo.
Saludos,
David
El 26/04/13 22:04, José Antonio Cuello escribió:
Si, es el mismo caso que el inner join ... si pones la condición de fecha en el inner join en vez del where los registros se descartan al crear el subconjunto cartesiano de tabla maestra + tabla hija sin necesitar de llegar al where y por descontado a un posible order by
Me alegro que te haya servido. Tambien puedes recurrir al PSQL y programar dentro del servidor PostgreSQL mediante cursores puedes hacer búsquedas masivas del tipo
hago select de las cabeceras de pedido
por cada cabecera busco su detalle
Bien programado, si el servidor cuanta con bastante memoria te aseguro que los procedimientos vuelan. Tengo estadisticas que comparan distintos años, incluso una que calcula los 20 productos mas vendidos por importe y por cantidad y luego compara las ventas de los clientes indicando que productos de los más vendidos no ha comprado. No tarda a penas un minuto o menos en calcularlo. Pero no te lo he sugerido antes porque no se si te interesa casarte con una base de datos o mantener compatibilidad.
Si te puede servir te mando los procedimientos. Un saludo.
--
Has recibido este mensaje porque estás suscrito al grupo "Eneboo" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a eneboo+unsubscribe@googlegroups.com.
--
Has recibido este mensaje porque estás suscrito al grupo "Eneboo" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a eneboo+unsubscribe@googlegroups.com.
Te adjunto una serie de archivos con funciones donde uso cursores. Como estas funciones usan vistas te paso las declaraciones de las vistas.
también te recomiendo la lectura de las windows function disponibles desde postgresql 8.4 (son funciones estadisticas avanzadas)
http://www.postgresql.org/docs/9.1/static/tutorial-window.html (doc oficial en ingles)http://www.postgresql.org.es/node/376 (doc no oficial en castellano)
Espero puedan aportate ideas de cómo desarrollar la necesidad del cliente. Por otro lado, si os puedo ser de ayuda basta me concretéis un poco más el proceso que necesitáis y puedo mirar de pensar algo más concreto.
Un saludo.
El 27 de abril de 2013 13:12, David Zafra Gómez <dez...@klo.es> escribió:
Me interesa, José Antonio. No tenemos intención de cambiar de base de datos.
Gracias de nuevo.
Saludos,
David
El 26/04/13 22:04, José Antonio Cuello escribió:
Si, es el mismo caso que el inner join ... si pones la condición de fecha en el inner join en vez del where los registros se descartan al crear el subconjunto cartesiano de tabla maestra + tabla hija sin necesitar de llegar al where y por descontado a un posible order by
Me alegro que te haya servido. Tambien puedes recurrir al PSQL y programar dentro del servidor PostgreSQL mediante cursores puedes hacer búsquedas masivas del tipo
hago select de las cabeceras de pedido
por cada cabecera busco su detalle
Bien programado, si el servidor cuanta con bastante memoria te aseguro que los procedimientos vuelan. Tengo estadisticas que comparan distintos años, incluso una que calcula los 20 productos mas vendidos por importe y por cantidad y luego compara las ventas de los clientes indicando que productos de los más vendidos no ha comprado. No tarda a penas un minuto o menos en calcularlo. Pero no te lo he sugerido antes porque no se si te interesa casarte con una base de datos o mantener compatibilidad.
Si te puede servir te mando los procedimientos. Un saludo.
--
Has recibido este mensaje porque estás suscrito al grupo "Eneboo" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a eneboo+un...@googlegroups.com.
--
Has recibido este mensaje porque estás suscrito al grupo "Eneboo" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a eneboo+un...@googlegroups.com.
--
Has recibido este mensaje porque estás suscrito al grupo "Eneboo" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a eneboo+un...@googlegroups.com.
Pregunta por (fecha BETWEEN fechaA AND fechaB) y fin del problema.
Lo quitas del índice, pero luego lo vuelves a comparar. Eso no es problema.
Es decir, puedes hacer lo siguiente:
CREATE INDEX facturascli_fecha
ON facturascli
USING btree
(fecha);
SELECT SUM(lineasfacturascli.cantidad)
FROM lineasfacturascli inner join facturascli on facturascli.idfactura
= lineasfacturascli.idfactura
WHERE
(facturascli.fecha BETWEEN '2013-04-09' and '2013-04-12') and
lineasfacturascli.referencia = '027006' and facturascli.codalmacen = 'ALG' and
facturascli.fecha+facturascli.hora > '2013-04-09T12:59:58' and
facturascli.fecha+facturascli.hora <= '2013-04-12T00:00:00'
GROUP BY lineasfacturascli.referencia
--