18 Mai 2015 23:29
19 Mai 2015 19:08
23 Jul 2015 16:50
25 Jul 2015 03:34
... mas em uma única query, como queria romulobonnadioJoséQuintas escreveu:- Um pra somar quantidade
- Um pra pegar primeira data
- Um pra pegar última data
CREATE TABLE `tbtroca` (
`idTroca` INT(11) NOT NULL AUTO_INCREMENT,
`idCliente` INT(11) NOT NULL DEFAULT '0',
`idProduto` INT(11) NOT NULL DEFAULT '0',
`dtTroca` DATE NOT NULL,
`qtUsada` DECIMAL(10,0) NOT NULL,
PRIMARY KEY (`idTroca`)
)
COLLATE='latin1_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=8;
INSERT INTO `tbtroca` (`idCliente`, `idProduto`, `dtTroca`, `qtUsada`) VALUES (1, 1, '2015-01-10', 3);
INSERT INTO `tbtroca` (`idCliente`, `idProduto`, `dtTroca`, `qtUsada`) VALUES (1, 1, '2015-02-10', 2);
INSERT INTO `tbtroca` (`idCliente`, `idProduto`, `dtTroca`, `qtUsada`) VALUES (1, 1, '2015-03-10', 1);
INSERT INTO `tbtroca` (`idCliente`, `idProduto`, `dtTroca`, `qtUsada`) VALUES (1, 1, '2015-04-10', 4);
INSERT INTO `tbtroca` (`idCliente`, `idProduto`, `dtTroca`, `qtUsada`) VALUES (1, 1, '2015-05-10', 4);
INSERT INTO `tbtroca` (`idCliente`, `idProduto`, `dtTroca`, `qtUsada`) VALUES (1, 1, '2015-06-10', 2);
INSERT INTO `tbtroca` (`idCliente`, `idProduto`, `dtTroca`, `qtUsada`) VALUES (1, 1, '2015-07-10', 3);
INSERT INTO `tbtroca` (`idCliente`, `idProduto`, `dtTroca`, `qtUsada`) VALUES (2, 1, '2015-07-03', 3);
INSERT INTO `tbtroca` (`idCliente`, `idProduto`, `dtTroca`, `qtUsada`) VALUES (3, 1, '2013-02-10', 3);
INSERT INTO `tbtroca` (`idCliente`, `idProduto`, `dtTroca`, `qtUsada`) VALUES (3, 1, '2014-03-21', 5);
INSERT INTO `tbtroca` (`idCliente`, `idProduto`, `dtTroca`, `qtUsada`) VALUES (3, 1, '2015-04-10', 3);
INSERT INTO `tbtroca` (`idCliente`, `idProduto`, `dtTroca`, `qtUsada`) VALUES (4, 1, '2015-05-23', 1);
INSERT INTO `tbtroca` (`idCliente`, `idProduto`, `dtTroca`, `qtUsada`) VALUES (4, 1, '2015-06-10', 2);
INSERT INTO `tbtroca` (`idCliente`, `idProduto`, `dtTroca`, `qtUsada`) VALUES (5, 1, '2015-07-10', 3);
SELECT idCliente Cliente,
COUNT(idCliente) Trocas,
DATE_FORMAT(MIN(dtTroca), "%d-%m-%Y" ) Primeira,
DATE_FORMAT(MAX(dtTroca), "%d-%m-%Y" ) Última,
DATEDIFF(MAX(dtTroca),MIN(dtTroca)) Intervalo,
DATEDIFF(MAX(dtTroca),MIN(dtTroca)) / COUNT(idCliente) Média,
DATE_FORMAT(DATE_ADD(MAX(dtTroca), INTERVAL CAST((DATEDIFF(MAX(dtTroca),Min(dtTroca)) / COUNT(idCliente) ) AS Decimal(0)) DAY), "%d-%m-%Y" ) Próxima,
AVG(qtUsada) 'Consumo Médio'
FROM tbtroca
-- WHERE idCliente = 1
GROUP BY idCliente
HAVING Count(idCliente) > 1
25 Jul 2015 21:00
26 Jul 2015 22:05
27 Jul 2015 23:13
oTBrowse := { ;
{ "CLIENTE", { || jpcadas->cdCodigo + " " + jpcadas->cdNome } }, ;
{ PNOT0270Titulo(), { || PNOT0270Texto() } } }
STATIC FUNCTION PNOT0270Titulo()
RETURN "Primeira Última Dias(T) Dias(M) Próxima Valor(Média)"
STATIC FUNCTION PNOT0270Texto()
LOCAL dDatIni, dDatPri, dDatUlt, nQtdTot := 0, nValTot := 0, cTexto := ""
dDatIni := Date() - nPeriodo // usar quantos dias pra análise
dDatPri := Date()
dDatUlt := Date() - nPeriodo
SELECT jpnota
OrdSetFocus( "jpnota3" )
SET SOFTSEEK ON
SEEK jpcadas->cdCodigo + Dtos( dDatIni )
SET SOFTSEEK OFF
DO WHILE jpnota->nfCadDes == jpcadas->cdCodigo .AND. .NOT. Eof()
IF jpnota->nfValNot > nValMin .AND. jpnota->nfStatus != "C"
Encontra( jpnota->nfTransa, "jptransa", "numlan" )
IF "VENDA" $ jptransa->trReacao
IF "-1" $ jptransa->trReacao
nValTot += jpnota->nfValNot
nQtdTot += 1
dDatPri := Min( dDatPri, jpnota->nfDatEmi )
dDatUlt := Max( dDatUlt, jpnota->nfDatEmi )
ELSEIF "+1" $ jptransa->trReacao
nValTot -= jpnota->nfValNot
ENDIF
ENDIF
ENDIF
SKIP
ENDDO
cTexto += Dtoc( dDatPri ) + " "
cTexto += Dtoc( dDatUlt ) + " "
cTexto += Transform( dDatUlt - dDatPri, "@E 999,999" ) + " "
cTexto += Transform( ( dDatUlt - dDatPri ) / nQtdTot, "@E 999,999" ) + " "
cTexto += Dtoc( dDatUlt + ( ( dDatUlt - dDatPri ) / nQtdTot ) ) + " "
cTexto += Transform( nValTot / nQtdTot, "@E 999,999,999.99" )
SELECT jpcadas
RETURN cTexto
31 Jul 2015 01:47
05 Ago 2015 00:27
29 Jan 2020 02:02
29 Jan 2020 19:39
29 Jan 2020 20:16
alxsts escreveu:Parabéns @Quintas.
Eu jamais me lembraria deste tópico. Agradeço aos colegas pelo incentivo.