maomelov Posted March 18, 2012 at 08:16 PM Report #444506 Posted March 18, 2012 at 08:16 PM Boa Noite, Tenho as seguintes tabelas: create table tb_requisicoes ( id_requisicao int primary key identity (1,1), data_req smalldatetime not null check(data_req<=getdate()), data_entrega smalldatetime not null default(dateadd(day,4,getdate())), id_utilizador int not null, constraint validar_data_entrega check (data_entrega>data_req), constraint chave_externa_utilizador foreign key(id_utilizador) references tb_utilizador(id_utilizador) ) go create table tb_utilizador ( id_utilizador int primary key identity (1,1), nome nvarchar(100) not null, morada nvarchar(1000) not null, cod_postal nchar(8) not null, localidade nvarchar(1000) not null, telefone nvarchar(16) not null, email nvarchar(1000), bi_cidadao nvarchar(12) not null unique ) go tenho os seguintes dados na tabela requisicoes: id_requisicao id_utilizador 9 2012-02-02 00:00:00 2012-02-05 00:00:00 10 12 2012-02-06 00:00:00 2012-02-10 00:00:00 10 8 2012-02-01 00:00:00 2012-02-04 00:00:00 9 7 2012-01-06 00:00:00 2012-01-09 00:00:00 8 14 2012-02-12 00:00:00 2012-02-14 00:00:00 8 13 2012-02-07 00:00:00 2012-02-09 00:00:00 7 6 2012-01-06 00:00:00 2012-01-08 00:00:00 7 5 2011-12-26 00:00:00 2011-12-28 00:00:00 5 4 2011-12-16 00:00:00 2011-12-20 00:00:00 4 3 2011-12-16 00:00:00 2011-12-20 00:00:00 3 11 2012-02-04 00:00:00 2012-02-08 00:00:00 3 10 2012-02-03 00:00:00 2012-02-05 00:00:00 2 2 2011-12-14 00:00:00 2011-12-19 00:00:00 2 1 2011-06-11 00:00:00 2011-06-18 00:00:00 1 Precisava de extrair os dados do utilizador com maior número de requisições efectuadas; Tenho a query abaixo mas que não me está a retornar os dados correctos: select tb_utilizador.* from tb_utilizador inner join tb_requisicoes on tb_utilizador.id_utilizador = tb_requisicoes.id_utilizador where tb_utilizador.id_utilizador in (select count(tb_requisicoes.id_requisicao) from tb_requisicoes group by tb_requisicoes.id_utilizador) podem ajudar pf??
Guest f-22 Posted March 18, 2012 at 10:01 PM Report #444530 Posted March 18, 2012 at 10:01 PM não testei mas creio que é isto. A query abaixo dá-te o utilizador com mais requisições Diz-me se funcionou. Quanto a tua query, executa só a parte e repara que devolves a contagem do agrupamento e não os id's dos utilizadores, logo ao fazeres o IN, não dá o que queres. select count(tb_requisicoes.id_requisicao) from tb_requisicoes group by tb_requisicoes.id_utilizador solução: select tb_utilizador.* from tb_utilizador inner join tb_requisicoes on tb_utilizador.id_utilizador = tb_requisicoes.id_utilizador where tb_utilizador.id_utilizador = (select top 1 id_utilizador from tb_requisicoes group by tb_requisicoes.id_utilizador order by count(tb_requisicoes.id_requisicao) desc)
maomelov Posted March 18, 2012 at 10:35 PM Author Report #444535 Posted March 18, 2012 at 10:35 PM boas, a tua query devolve apenas o utilizador com o id 2 e repetido 2 David Costa Rua da Liberdade, 234, 3º Esq. 1234-871 Lisboa 218765435 david_costa@email.com 324588775545 2 David Costa Rua da Liberdade, 234, 3º Esq. 1234-871 Lisboa 218765435 david_costa@email.com 324588775545 de acordo com os dados da tabela requisicoes o resultado final deveria devolver 5 id´s de utilizadores diferentes com 2 requisicoes cada e que sao o id: 10,8,7,3,2. id_requisicao id_utilizador 9 2012-02-02 00:00:00 2012-02-05 00:00:00 10 12 2012-02-06 00:00:00 2012-02-10 00:00:00 10 8 2012-02-01 00:00:00 2012-02-04 00:00:00 9 7 2012-01-06 00:00:00 2012-01-09 00:00:00 8 14 2012-02-12 00:00:00 2012-02-14 00:00:00 8 13 2012-02-07 00:00:00 2012-02-09 00:00:00 7 6 2012-01-06 00:00:00 2012-01-08 00:00:00 7 5 2011-12-26 00:00:00 2011-12-28 00:00:00 5 4 2011-12-16 00:00:00 2011-12-20 00:00:00 4 3 2011-12-16 00:00:00 2011-12-20 00:00:00 3 11 2012-02-04 00:00:00 2012-02-08 00:00:00 3 10 2012-02-03 00:00:00 2012-02-05 00:00:00 2 2 2011-12-14 00:00:00 2011-12-19 00:00:00 2 1 2011-06-11 00:00:00 2011-06-18 00:00:00 1 ainda nao foi desta...mas nao estamos longe
Guest f-22 Posted March 18, 2012 at 11:14 PM Report #444540 Posted March 18, 2012 at 11:14 PM Pensei que querias só 1. Tenta esta, retirei o TOP 1. Se quiseres só os dados do utilizador, podes retirar o inner join. select * from tb_utilizador where tb_utilizador.id_utilizador = (select id_utilizador from tb_requisicoes group by tb_requisicoes.id_utilizador order by count(tb_requisicoes.id_requisicao) desc)
maomelov Posted March 18, 2012 at 11:26 PM Author Report #444543 Posted March 18, 2012 at 11:26 PM Deu o seguinte erro: Msg 1033, Level 15, State 1, Line 7 The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified. Tenho a seguinte query: select tb_utilizador.nome, COUNT(tb_requisicoes.id_requisicao) from tb_utilizador inner join tb_requisicoes on tb_utilizador.id_utilizador = tb_requisicoes.id_utilizador group by tb_utilizador.nome que devolve o resultado: Ana Gomes 1 António Palma 2 David Costa 2 Filipa Ferraz 1 Jaime Nunes 2 Jorge Lopes 2 Rita Alves 1 Rui Almeida 2 Sara Domingos 1 queria apenas mostrar os 5 utilizadores que têm 2 requisicoes(sao so que têm mais
Guest f-22 Posted March 18, 2012 at 11:51 PM Report #444552 Posted March 18, 2012 at 11:51 PM sim desculpa não reparei no = e no order 🙂 select * from tb_utilizador where tb_utilizador.id_utilizador in ( select top 2 id_utilizador from tb_requisicoes group by id_utilizador order by count(id_requisicao) desc ) Esta query dá-te os 2 utilizadores com + requisições.
maomelov Posted March 19, 2012 at 10:41 AM Author Report #444574 Posted March 19, 2012 at 10:41 AM Sim funciona...se quisesse o utilizador com mais requisicoes bastaria colocar top 1? obrigado pela ajuda
Guest f-22 Posted March 19, 2012 at 11:28 AM Report #444583 Posted March 19, 2012 at 11:28 AM Sim era meteres top 1. Se quiseres todos tiras o top X e o order.
maomelov Posted March 19, 2012 at 01:10 PM Author Report #444614 Posted March 19, 2012 at 01:10 PM tenho outro dúvida... Tenho as seguintes tabelas: create table tb_livros ( id_livro int primary key identity (1,1), id_edicao int not null, data_aquisicao smalldatetime not null default(getdate()), custo money not null default(0) check(custo>0), constraint chave_externa_edicao foreign key(id_edicao) references tb_edicoes(id_edicao) ) go create table tb_requisicoes ( id_requisicao int primary key identity (1,1), data_req smalldatetime not null check(data_req<=getdate()), data_entrega smalldatetime not null default(dateadd(day,4,getdate())), id_utilizador int not null, constraint validar_data_entrega check (data_entrega>data_req), constraint chave_externa_utilizador foreign key(id_utilizador) references tb_utilizador(id_utilizador) ) go create table tb_livros_requisitados ( id_livro int not null, id_requisicao int not null, constraint pk_livros_requisitados primary key(id_livro,id_requisicao), constraint chave_externa_livros foreign key(id_livro) references tb_livros(id_livro), constraint chave_externa_requisicao foreign key(id_requisicao) references tb_requisicoes(id_requisicao) ) go e os dados da tabela livros_requisitados: id_livro id_requisicao 1 1 2 1 6 1 2 2 3 2 4 2 7 3 8 3 12 3 23 4 27 4 31 4 32 5 42 5 5 5 2 5 54 6 55 6 53 7 5 7 9 7 24 7 23 8 33 8 13 8 12 9 36 9 20 9 26 10 36 10 47 10 16 10 11 11 5 11 46 11 50 12 17 12 4 13 28 14 30 14 25 14 precisava de saber o número máximo, mínimo e a média de livros por requisição; tenho a seguinte query: select id_requisicao, count(id_livro) from tb_livros_requisitados group by id_requisicao having count(id_livro)>1 que me devolve o numero maximo de livros por requisicao....nao sei como chegar ao minimo e media por requisicao podes ajudar pf? obrigado
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now