Page 2 of 2

Re: Consulta Mysql

Posted: Mon Nov 05, 2018 12:30 am
by carlos moc
A função having funciona como um filtro, ela vai percorrer toda tabela, ela cria uma especie de tabela temporária, em tabelas muito extensas não é recomendável o uso.

Re: Consulta Mysql

Posted: Mon Nov 05, 2018 2:53 pm
by FranciscoA
carlos moc wrote:A função having funciona como um filtro, ela vai percorrer toda tabela, ela cria uma especie de tabela temporária, em tabelas muito extensas não é recomendável o uso.

La función HAVING funciona como un filtro, que va a recorrer toda la tabla, crea una especie de tabla temporal, en tablas muy extensas no se recomienda el uso.

Gracias, Carlos.

Re: Consulta Mysql

Posted: Mon Nov 05, 2018 9:23 pm
by jnavas
SELECT numdoc,fechemis, sum(debe) debitos, sum(haber) creditos, sum(debe-haber) diferencia
FROM facturas
GROUP BY numdoc,fechemis
HAVING SUM(debe-haber) > 0;

Debes tener indice por ambos campos, (Si fuese SQLSERVER rechazará la sentencia), todos los campos del SELECT deben estar en el GROUP BY excepto las funciones

SELECT numdoc,fechemis, sum(debe) debitos, sum(haber) creditos, sum(debe-haber) diferencia
FROM facturas
GROUP BY numdoc,fechemis
HAVING SUM(debe-haber) > 0;

Recomiendo

SELECT fechemis,numdoc, sum(debe) debitos, sum(haber) creditos, sum(debe-haber) diferencia
FROM facturas
GROUP BY fechemis,numdoc
HAVING SUM(debe-haber) > 0;

Debes tener indice de fechemis,numdoc,

Si solo requiere las fechas,

SELECT fechemis, sum(debe) debitos, sum(haber) creditos, sum(debe-haber) diferencia
FROM facturas
GROUP BY fechemis
HAVING SUM(debe-haber) > 0;

Indice de fechemis

Re: Consulta Mysql

Posted: Mon Nov 05, 2018 11:28 pm
by jnavas
SELECT numdoc,fechemis, sum(debe) debitos, sum(haber) creditos, sum(debe-haber) diferencia
FROM facturas
GROUP BY numdoc,fechemis
HAVING SUM(debe-haber) > 0;

Debes tener indice por ambos campos, (Si fuese SQLSERVER rechazará la sentencia), todos los campos del SELECT deben estar en el GROUP BY excepto las funciones

SELECT numdoc,fechemis, sum(debe) debitos, sum(haber) creditos, sum(debe-haber) diferencia
FROM facturas
GROUP BY numdoc,fechemis
HAVING SUM(debe-haber) > 0;

Recomiendo

SELECT fechemis,numdoc, sum(debe) debitos, sum(haber) creditos, sum(debe-haber) diferencia
FROM facturas
GROUP BY fechemis,numdoc
HAVING SUM(debe-haber) > 0;

Debes tener indice de fechemis,numdoc,

Si solo requiere las fechas,

SELECT fechemis, sum(debe) debitos, sum(haber) creditos, sum(debe-haber) diferencia
FROM facturas
GROUP BY fechemis
HAVING SUM(debe-haber) > 0;

Indice de fechemis

Re: Consulta Mysql

Posted: Mon Nov 05, 2018 11:45 pm
by FranciscoA
jnavas wrote:Debes tener indice por ambos campos,

Asi es, Juan. Tengo indices por cada uno de esos campos.
jnavas wrote:SELECT numdoc,fechemis, sum(debe) debitos, sum(haber) creditos, sum(debe-haber) diferencia
FROM facturas
GROUP BY numdoc,fechemis
HAVING SUM(debe-haber) <> 0;

Gracias Juan, bajó a 3.076 segundos.
Lo que no entiendo es por qué se tiene que agregar al GROUP BY, el campo fechemis. (además del campo numdoc)
Saludos.

Re: Consulta Mysql

Posted: Tue Nov 06, 2018 10:22 am
by jnavas
Francisco
Saludos, ayer respondí, no veo la respuesta en el foro.

Gracias Juan, bajó a 3.076 segundos.
Lo que no entiendo es por qué se tiene que agregar al GROUP BY, el campo fechemis. (además del campo numdoc)
Saludos.

Considero que numdoc no es necesario utilizarlo en el group by
Si necesitas presentar un resultado acumulado por cuenta (Tipo Mayor analitico) de una cuenta o documento especifico. deberás agrupar solo por fecha,
Group by tiene sus reglas, mi aplicación trabaja con MySQL y SQLServer y SQL-Server es muy rígido con el group By, recomiendo seguir la siguiente regla.

SELECT CAMPO1,CAMPO2,SUM(A),SUM(B),MIN(A),MIN(B)
FROM TABLA
WHERE CAMPO3="XVALOR"
GROUP BY CAMPO1,CAMPO2
ORDER BY CAMPOX

La optimización dependerá del indices en CAMPO1,CAMPO2 y CAMPO3

Si deseas publica en formato excel que deseas mostrar y te daré mis recomendaciones, si puedes una copia de la tablas para evaluar su rendimiento, podrás enviarla a mi correo jnavas@datapronet.com y luego publicaremos en este sitio las recomendaciones.

Re: Consulta Mysql

Posted: Tue Nov 06, 2018 10:47 pm
by FranciscoA
Juan, aqui tienes.

https://www.4shared.com/photo/1VnahMMgf ... encia.html

Code: Select all | Expand



oServer:Query("CREATE TABLE IF NOT EXISTS facturas(" +;
           "idcomprob  INT(12)       NOT NULL DEFAULT 0 ," +;
           "NUMCD      INT(12)       NOT NULL DEFAULT 0 COMMENT 'No. de cdiario'," +;
           "NUMDOC     INT(12)       NOT NULL DEFAULT 0 COMMENT 'No. de documento'," +;
           "TD         CHAR(2)       NOT NULL DEFAULT '' COMMENT 'Tipo de documento'," +;
           "FECHEMIS   DATE              NULL COMMENT 'Fecha de emision'," +;
           "CODICONT   VARCHAR(20)   NOT NULL DEFAULT '' COMMENT 'Codigo Contable'," +;
           "NOMBRE     VARCHAR(50)   NOT NULL DEFAULT '' COMMENT 'Nombre de la Cuenta'," +;
           "BENEFI     VARCHAR(50)   NOT NULL DEFAULT '' COMMENT 'Nombre beneficiario'," +;
           "CONCEPTO   VARCHAR(60)   NOT NULL DEFAULT '' COMMENT 'concepto especifico'," +;
           "DEBE       NUMERIC(15,2) NOT NULL DEFAULT 0.00 COMMENT 'Mov del debe'," +;
           "HABER      NUMERIC(15,2) NOT NULL DEFAULT 0.00 COMMENT 'Mov del haber'," +;
           "SALDO      NUMERIC(15,2) NOT NULL DEFAULT 0.00 COMMENT 'Saldo'," +;
           "TCAMBIO    NUMERIC(15,4) NOT NULL DEFAULT 0.0000 COMMENT 'Tcambio US$'," +;
           "DOLARES    NUMERIC(15,2) NOT NULL DEFAULT 0.00 COMMENT 'Ck en dolares'," +;
           "PSPTO      VARCHAR(20)   NOT NULL DEFAULT '' COMMENT 'Cta Presupuesto'," +;
           "CONCEPTG1  VARCHAR(92)   NOT NULL DEFAULT '' COMMENT 'concepto'," +;
           "CONCEPTG2  VARCHAR(92)   NOT NULL DEFAULT '' COMMENT 'concepto'," +;
           "CONCEPTG3  VARCHAR(92)   NOT NULL DEFAULT '' COMMENT 'concepto'," +;
           "CONCEPTG4  VARCHAR(92)   NOT NULL DEFAULT '' COMMENT 'concepto'," +;
           "CONCEPTG5  VARCHAR(92)   NOT NULL DEFAULT '' COMMENT 'concepto'," +;
           "CONCEPTG6  VARCHAR(92)   NOT NULL DEFAULT '' COMMENT 'concepto'," +;
           "CODIBANCOS VARCHAR(20)   NOT NULL DEFAULT '' COMMENT 'Codigo de bancos-cks'," +;
           "IMPORT     VARCHAR(10)   NOT NULL DEFAULT '' COMMENT 'De donde se importa'," +;
           "APLICADOC  VARCHAR(20)   NOT NULL DEFAULT '' COMMENT 'Doc aplicado'," +;
           "NUMEGRESO  INT(10)       NOT NULL DEFAULT 0 COMMENT 'No. de egreso'," +;
           "USUARIO    VARCHAR(50)   NOT NULL DEFAULT '' COMMENT 'quien lo graba'," +;
           "MODIFICADO VARCHAR(50)   NOT NULL DEFAULT '' COMMENT 'quien lo modifica'," +;
           "INDEX i_numdoc (numdoc),"+;
           "INDEX i_codicont (codicont),"+;
           "INDEX i_benefi (benefi),"+;
           "INDEX i_fechemis (fechemis))"+;
           "ENGINE = InnoDB ;")