Assuming you have something like:
CREATE TABLE tbl_compra
(
id BIGINT PRIMARY KEY,
nome_prod TEXT NOT NULL,
cod_prod BIGINT NOT NULL,
cod_cliente BIGINT NOT NULL,
data_compra DATE NOT NULL
);
INSERT INTO tbl_compra ( id, nome_prod, cod_prod, cod_cliente, data_compra ) VALUES ( 1, 'Sabonete', 1, 338, to_date('30/09/2017','DD/MM/YYYY') );
INSERT INTO tbl_compra ( id, nome_prod, cod_prod, cod_cliente, data_compra ) VALUES ( 2, 'Pão', 2, 338, to_date('02/03/2018','DD/MM/YYYY') );
INSERT INTO tbl_compra ( id, nome_prod, cod_prod, cod_cliente, data_compra ) VALUES ( 3, 'Alho', 3, 338, to_date('15/12/2017','DD/MM/YYYY') );
INSERT INTO tbl_compra ( id, nome_prod, cod_prod, cod_cliente, data_compra ) VALUES ( 4, 'Cenoura', 4, 338, to_date('01/01/2018','DD/MM/YYYY') );
INSERT INTO tbl_compra ( id, nome_prod, cod_prod, cod_cliente, data_compra ) VALUES ( 5, 'Água', 5, 587, to_date('30/09/2017','DD/MM/YYYY') );
INSERT INTO tbl_compra ( id, nome_prod, cod_prod, cod_cliente, data_compra ) VALUES ( 6, 'Sabonete', 1, 587, to_date('02/03/2018','DD/MM/YYYY') );
INSERT INTO tbl_compra ( id, nome_prod, cod_prod, cod_cliente, data_compra ) VALUES ( 7, 'Presunto', 6, 587, to_date('15/12/2017','DD/MM/YYYY') );
INSERT INTO tbl_compra ( id, nome_prod, cod_prod, cod_cliente, data_compra ) VALUES ( 8, 'Alface', 7, 856, to_date('30/09/2017','DD/MM/YYYY') );
INSERT INTO tbl_compra ( id, nome_prod, cod_prod, cod_cliente, data_compra ) VALUES ( 9, 'Sabonete', 1, 856, to_date('02/03/2018','DD/MM/YYYY') );
INSERT INTO tbl_compra ( id, nome_prod, cod_prod, cod_cliente, data_compra ) VALUES ( 10, 'Queijo', 8, 856, to_date('15/12/2017','DD/MM/YYYY') );
INSERT INTO tbl_compra ( id, nome_prod, cod_prod, cod_cliente, data_compra ) VALUES ( 11, 'Sabonete', 1, 338, to_date('02/01/2018','DD/MM/YYYY') );
INSERT INTO tbl_compra ( id, nome_prod, cod_prod, cod_cliente, data_compra ) VALUES ( 12, 'Sabonete', 1, 879, to_date('12/02/2018','DD/MM/YYYY') );
INSERT INTO tbl_compra ( id, nome_prod, cod_prod, cod_cliente, data_compra ) VALUES ( 13, 'Sabonete', 1, 879, to_date('23/12/2017','DD/MM/YYYY') );
You can use the function max()
combined with the clause GROUP BY
:
SELECT
cod_cliente, -- CODIGO DO CLIENTE
count(1) AS qtd_compras, -- QUANTIDADE TOTAL DE SABONETES COMPRADOS
max(data_compra) AS data_ultima_compra -- DATA DA ULTIMA COMPRA DE UM SABONETE
FROM
tbl_compra
WHERE
nome_prod = 'Sabonete'
GROUP BY
cod_cliente;
Exit:
| cod_cliente | qtd_compras | data_ultima_compra |
|-------------|-------------|--------------------|
| 338 | 2 | 2018-01-02 |
| 587 | 1 | 2018-03-02 |
| 856 | 1 | 2018-03-02 |
| 879 | 2 | 2018-02-12 |
Sqlfiddle: http://sqlfiddle.com/#! 17/c53a1/2
can only 1 product per sale ? has sale code ?
– Rovann Linhalis
Tip make 1st the last purchase a subselect with MAX , use this as a virtual table , then just see who had 'soap' in this purchase.
– Motta
"Bread" and "Soap" have the even code ?!
– Lacobus
Sorry. Typo. Soap is 2 and Bread is 1.
– G. Brandão