Array
(
)

SQL os mais locados por periodo

Marcusbraga
   - 01 mar 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...


Eniorm
   - 01 mar 2006

Posta aqui a estrutura das tabelas.
[/tagcod]


Emerson
   - 01 mar 2006

algo assim:
#Código

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


Marcusbraga
   - 01 mar 2006

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


Emerson
   - 01 mar 2006

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

imagine que você tem um livro com 950 páginas sobre delphi (todas as páginas no mesmo livro). suponhamos que você precise procurar pela função stringreplace(). 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 locacaodet_datafilme on locacaodet(datadelocacao, codigodofilme)
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)


Motta
   - 01 mar 2006

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.


Martins
   - 01 mar 2006


Citação:
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.