Consulta Mysql

carlos moc
Posts: 3
Joined: Mon Oct 23, 2017 1:47 pm

Re: Consulta Mysql

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

Re: Consulta Mysql

Post 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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
jnavas
Posts: 399
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela
Contact:

Re: Consulta Mysql

Post 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 _, (Si fuese SQLSERVER rechazará la sentencia), todos _ 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: 399
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela
Contact:

Re: Consulta Mysql

Post 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 _, (Si fuese SQLSERVER rechazará la sentencia), todos _ 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
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Consulta Mysql

Post by FranciscoA »

jnavas wrote:Debes tener indice por _,
Asi es, Juan. Tengo indices por cada uno de _.
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.

Fwxh1204-MySql-TMySql
User avatar
jnavas
Posts: 399
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela
Contact:

Re: Consulta Mysql

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

Re: Consulta Mysql

Post by FranciscoA »

Juan, aqui tienes.

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

Code: Select all


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.

Fwxh1204-MySql-TMySql
Post Reply