Consulta Mysql

Re: Consulta Mysql

Postby carlos moc » 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.
carlos moc
 
Posts: 3
Joined: Mon Oct 23, 2017 1:47 pm

Re: Consulta Mysql

Postby FranciscoA » Mon Nov 05, 2018 2: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
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Consulta Mysql

Postby jnavas » Mon Nov 05, 2018 9: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
User avatar
jnavas
 
Posts: 472
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela

Re: Consulta Mysql

Postby jnavas » 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
User avatar
jnavas
 
Posts: 472
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela

Re: Consulta Mysql

Postby FranciscoA » 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
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Consulta Mysql

Postby jnavas » 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.
User avatar
jnavas
 
Posts: 472
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela

Re: Consulta Mysql

Postby FranciscoA » Tue Nov 06, 2018 10:47 pm

Juan, aqui tienes.

https://www.4shared.com/photo/1VnahMMgf ... encia.html
Code: Select all  Expand view


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
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 91 guests