FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Consulta Mysql
Posts: 3
Joined: Mon Oct 23, 2017 01:47 PM
Re: Consulta Mysql
Posted: Mon Nov 05, 2018 12:30 AM

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.

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Consulta Mysql
Posted: Mon Nov 05, 2018 02:53 PM
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.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 492
Joined: Wed Nov 16, 2005 12:03 PM
Re: Consulta Mysql
Posted: Mon Nov 05, 2018 09:23 PM

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

Posts: 492
Joined: Wed Nov 16, 2005 12:03 PM
Re: Consulta Mysql
Posted: Mon Nov 05, 2018 11:28 PM

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

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Consulta Mysql
Posted: Mon Nov 05, 2018 11:45 PM
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.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 492
Joined: Wed Nov 16, 2005 12:03 PM
Re: Consulta Mysql
Posted: Tue Nov 06, 2018 10:22 AM

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.

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Consulta Mysql
Posted: Tue Nov 06, 2018 10:47 PM
Juan, aqui tienes.

https://www.4shared.com/photo/1VnahMMgf ... encia.html
Code (fw): Select all Collapse
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 ;")
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql

Continue the discussion