Fórum Mostrar 10 Primeiros/Ultimos #315297
07/03/2006
0
se x = 10 então
quero saber os 10 produtos mais vendidos da minha loja??
me passaram esse código em SQL, mais não funcionou:
select left :x detlocacao.cod_filme, count(detlocacao.cod_filme) as Locacoes from detlocacao where detlocacao.userdataalterou =:DATA group by detlocacao.cod_filme order by 2 desc
mais não funcionou comigo...
[b:35462532d4]uso Interbase 6 e delphi 7[/b:35462532d4] :roll:
Paullsoftware
Curtir tópico
+ 0Posts
07/03/2006
Rjun
SELECT TOP 10 * FROM Tabela
Gostei + 0
07/03/2006
Martins
Assim mostra os 10 primeiros como está no título.
SELECT FIRST 10 CAMPOS FROM TABELA
Agora vc pode agrupar os mais vendidos e depois usar o select acima para limitar a exibição.
Boa sorte!!
Gostei + 0
08/03/2006
Spiritwwwalker
Quando li seu tópico, imediatamente me veio à cabeça o atributo TOP para selecionar uma determinada quantidade de registros, porém até então imaginava que ele não fazia parte do padrão SQL ANSI, tratando-se de uma implementação do MS Access, mas como o colega Rjun afirma que o atributo TOP também é utilizado no SQL Server, então presumo que ele deva fazer parte de outras implementações SQL do mercado ou, ao menos, de uso exclusivo das ferramentas Microsoft. Sendo assim, convém lembrar que o emprego de TOP, em determinadas circunstâncias, não retorna EXATAMENTE a quantidade de registros especificada, visto que a consulta incluirá produtos de preços semelhantes. Por exemplo:
SELECT TOP 10 Produtos FROM tblProdutos WHERE Categoria = ´Enlatados´ ORDER BY Preco DESC
A consulta poderá retornar os 10 produtos de custo mais elevado da categoria ´Enlatados´, mas se uma famigerada lata de ervilhas (ou de milho... ) :D de determinada marca tiver preço idêntico ao de uma concorrente, a listagem será composta de 11 e não 10 registros.
Eu nunca testei a utilização do atributo TOP em Delphi, mas se a solução proposta pelo colega Martins também não funcionar, então só resta criar um loop que percorra todos os registros, selecionando e comparando os valores até atingir a quantidade desejada. Ao final, convém verificar se eventualmente não há produtos com preços similares ao último registro, do contrário, a consulta não estará completa (motivo pelo qual o atributo TOP não retorna exatamente a quantidade especificada). Espero ter ajudado. Boa sorte para você.
Gostei + 0
08/03/2006
Paullsoftware
se funciona com vc´s não sei, sei que comigo não funciona eu já tentei diversas formas de fazer isso inclusive usando esses comandos já citados por vc´s...
nenhum dos comandos [b:c11ec84b62]Left, Top, Rows, First[/b:c11ec84b62]... funcionaram comigo.. tanto pelo IbExpert como pela SQL da tabela através do Delphi. por isso então resolvi postar aqui no fórum.
a propósito [b:c11ec84b62]SpiritWWWalker[/b:c11ec84b62], não access sei que funciona a função TOP mais apenas em access, isso eu usava através de consulta e só fazia chamá-la pelo delphi, mais agora to usando [b:c11ec84b62]Interbase[/b:c11ec84b62] e não sei qual comando/função/código devo usar.
Grato a todos pela colaboração! :cry:
Gostei + 0
08/03/2006
Aroldo Zanela
select T1.* from catalogo T1 where (select sum(1) FROM catalogo T2 where (T2.cat_id<=T1.cat_id) )<=3 ORDER BY T1.cat_id asc
Tenta o código acima.
Gostei + 0
08/03/2006
Paullsoftware
Não entendi o código
:oops:
Gostei + 0
08/03/2006
Motta
SELECT * FROM (SELECT VP1.*,(SELECT COUNT(*) FROM (SELECT DISTINCT(QTD_MOEDA) QTD_MOEDA FROM VALORES VP2) T WHERE T.QTD_MOEDA > VP1.QTD_MOEDA) QTD FROM VALORES VP1) TUDO WHERE QTD < 3 ORDER BY 4 DESC
tabela
valores
--------
qtd_moeda
obtem que tem a qtd de valores maiores menores que o limite 3 no caso
exempo
123 5
234 4
345 3
567 2 <<
678 1 <<
789 0 <<
ok ?
Gostei + 0
08/03/2006
Paullsoftware
a principio nunca vi nada igual, mais, vou tentar aqui e posto o resultado! :lol:
Gostei + 0
14/03/2006
Paullsoftware
Gostei + 0
14/03/2006
Aroldo Zanela
Por favor, coloca as DDLs das duas tabelas para que possamos simular por aqui.
Gostei + 0
14/03/2006
Paullsoftware
Por favor, coloca as DDLs das duas tabelas para que possamos simular por aqui.[/quote:155f2e4f41]
ai vai! :wink:
CREATE TABLE DETLOCACAO ( CODIGO INTEGER NOT NULL, LOCACAO INTEGER, FILME INTEGER, DIARIA INTEGER, NOME_FILME VARCHAR(50), COD_FILME INTEGER DEFAULT 0, VALOR_FILME DECIMAL(6,2), BONUS VARCHAR(1) DEFAULT ´N´, DEVOLVIDO VARCHAR(1) DEFAULT ´N´, DATADEVOLVIDO TIMESTAMP, USERINCLUIU VARCHAR(10), USERDATAINCLUIU TIMESTAMP DEFAULT ´NOW´, USERALTEROU VARCHAR(10), USERDATAALTEROU TIMESTAMP DEFAULT ´NOW´ );
quero criar uma VIEW com os campos:
Nome_Filme e Locado (onde locado seria o total de locações daquele filme)...
Gostei + 0
14/03/2006
Motta
select para obter a qtd de locados
SELECT NOME_FILME,COUNT(*) QTD
FROM DETLOCACAO
GROUP BY NOME_FILME
VIEW
CREATE OR REPLAVE VIEW V_LOCADOS
AS
SELECT NOME_FILME,COUNT(*) QTD
FROM DETLOCACAO
GROUP BY NOME_FILME
SELECT DE 10 MAIS LOCADOS
....
SELECT *
FROM (SELECT VP1.*,(SELECT COUNT(*)
FROM (SELECT DISTINCT(QTD) QTD
FROM V_LOCADOS VP2) T
WHERE T.QTD > VP1.QTD ) QTD
FROM V_LOCADOS VP1) TUDO
WHERE QTD < 11
ORDER BY 4 DESC
ALGUNS BANCO NAO PERMITEM UM SUBSELECT POREM
BOA SORTE
Gostei + 0
15/03/2006
Paullsoftware
Gostei + 0
15/03/2006
Martins
Supondo q vc tenha uma tabela Filmes e q o Campo[b:73f673328e] Filme [/b:73f673328e]de DETLOCACAO armazene o código do filme, não se faria necessário o[color=darkred:73f673328e] [b:73f673328e]nome_filme[/b:73f673328e][/color:73f673328e], a menos q seja uma [b:73f673328e]View[/b:73f673328e].
Gostei + 0
15/03/2006
Paullsoftware
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)