Query para consultar vendar no período SQL

Olaa boa noite,

Eu preciso montar uma query que emita um relatório pra apresentar o total de vendas de cada loja em um período, agrupados por cartão de crédito.

as tabelas seriam mais ou menos assim:

Tabela SALE (id, date, value, credit_card, store_id)
Tabela credit_card (id, name)
Tabela store(id, name)

Eu fiz uma query mas ele nao esta me mostrando o período corretamente:

SELECT c.name, b.name, a.value FROM sale
as a INNER JOIN credit_card
as b on a.id = b.id INNER JOIN
store as c on a.id = c.id WHERE a.date = ? GROUP by b.id;

Alguem sabe o que poderia ser?

Quando se usa período em sql, você tem duas opções:

Usar maior/igual e menor/igual…

...WHERE a.date >= data1 and a.date <= data2 ...

Ou usando between

...WHERE a.date between data1 and data2 ...

E para o total de venda por agrupamento, você precisa usar a função SUM…

SELECT c.name, b.name, SUM(a.value) ...

Outro ponto, quando se usa agrupamento (group by), todos os campos que não estão em funções de agrupamento (SUM/AVG/COUNT/MIN/MAX, etc) devem ser relacionadas, no seu caso não basta só chamar b.id

GROUP BY c.name, b.name, b.id

Percebeu que não relacionei o a.value? Isso porque já está no agrupamento pela função SUM… espero ter ajudado

Opa…

Agora foi hehe ficou assim:

SELECT c.name, b.name, SUM(a.value) from sale as a inner join
credit_card as b on a.id = b.id inner join
store as c on a.id = c.id WHERE
a.date between data1 and data2
GROUP by c.name, b.name, b.id;

Muito obrigado Rodevops =)