Jump to content

Query SQL Server


maomelov
 Share

Recommended Posts

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??

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.