SQL os mais locados por periodo

01/03/2006

Amigos estou fazendo um programa pra locadora e gostaria de saber como faço para calcular os 10 filmes mais locados dos ultimos 15 dias

uso o firebird 1.5 e delphi 7.0

tenho uma tabela chamada locacaodet onde tenho todos os dados das locacoes

codigodofilme e data de locaçao acho q é o q interessa.

não sei como montar o sql para somar quantas vezes cada filme foi locado de um determinada data até hoje e ordenar pelo maior resultado

alguem pode me ajudar, desde ja agradeço...


obrigado...


Marcusbraga

Respostas

01/03/2006

Eniorm

Posta aqui a estrutura das tabelas.
[/code]


Responder Citar

01/03/2006

Emerson

algo assim:
select first 10
  codigodofilme,
  count(codigodofilme) qtdlocacoes
from
  locacaodet
where
  datadelocacao between (current_date - 15) and current_date
group by
  codigodofilme
order by
  2 desc
obs.:para uma melhor performance crie índices pelos campos codigodofilme e datadelocacao


Responder Citar

01/03/2006

Marcusbraga

Obrigado pelo código, funcionou perfeitamente só nao entendi o porque criar o indice se os dois campos estão na mesma tabela o q mudaria na performance? e como criaria esses indices? agradeço desde ja...
obrigado


Responder Citar

01/03/2006

Emerson

o porquê do índice? o que mudaria na performance?

imagine que você tem um livro com 950 páginas sobre delphi ([b:73b1999eb0]todas as páginas no mesmo livro[/b:73b1999eb0]). suponhamos que você precise procurar pela função [b:73b1999eb0]stringreplace()[/b:73b1999eb0]. quanto tempo você poderá levar para encontrá-lo nessas 950 páginas se não houver um índice no livro?
o mecanismo de banco de dados enfrenta o mesmo problema se não tiver sido criado um índice.

para criar o índice você pode excutar o comando:
create index [i:73b1999eb0]locacaodet_datafilme[/i:73b1999eb0] on locacaodet([i:73b1999eb0]datadelocacao, codigodofilme[/i:73b1999eb0])
onde ´locacaodet_datafilme´ é o nome do índice que será criado e ´datadelocacao, codigodofilme´ são os campos a serem indexados.
(você pode optar por criar dois índices: um pela data de locação e outro pelo código do filme)


Responder Citar

01/03/2006

Motta

O índice não garante uma busca mais rápida , vai depender ,entre outros fatores , da relação de nº de datas diferentes/nº de registros (cardinalidade) , se for baixo vale a pena o índice , alto é melhor a leitura total , deve-se pesar também a nº de vezes que o índice será usado x o tempo maior necessário para atualizar a tabela (pois o índice deverá ser atualizado também) , se o rel. é tirado uma vez por mês não seria melhor esperar um tempo maior que aumentar o tempo de atualização da locação ?
Não existe uma fórmula mágica para a criação de índice .Acho que todo mundo concorda, não ?
Mas o que o emerson.en disse é verdade , não se usa índice só para relacionamento, busca em uma tabela também.


Responder Citar

01/03/2006

Martins

O índice não garante uma busca mais rápida , vai depender ,entre outros fatores , da relação de nº de datas diferentes/nº de registros (cardinalidade) , se for baixo vale a pena o índice , alto é melhor a leitura total , deve-se pesar também a nº de vezes que o índice será usado x o tempo maior necessário para atualizar a tabela (pois o índice deverá ser atualizado também) , se o rel. é tirado uma vez por mês não seria melhor esperar um tempo maior que aumentar o tempo de atualização da locação ? Não existe uma fórmula mágica para a criação de índice .Acho que todo mundo concorda, não ? Mas o que o emerson.en disse é verdade , não se usa índice só para relacionamento, busca em uma tabela também.


Tudo bem, mas ninguém pode negar que é sempre bom utilizar índices, e até onde os utilizei eles agilizaram bastante as consultas.


Responder Citar