Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Denis Luiz

Trazer TOP 1 sem subquery

Recommended Posts

Olá

 

Estou enfrentando um problema com uma view aqui que provavelmente seja a coisa mais fácil do mundo mas já estou de cabelo branco

 

Tenho uma tabela de Funcionarios com idFuncionario e Nome

Tabela de Cargos com idCargo e Descricao

Tabela de Seções com idSecao e Descricao

E por fim uma tabela Funcionario Cargo com idFuncionario, idCargo, idSecao, Salario e Data_Inicio

 

Preciso trazer todas as informações do funcionario mas apenas com o cargo atual

Os INNER JOINs tudo bem mas como eu trago somente o cargo atual sem fazer subquerie

 

Eu fiz com subquerie mas ficou lento

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentou um subselect com Max no id?

 

Abçs

 

Pensei nisso só que nem sempre o max ID é o cargo atual...

O Cara que inseriu as infs no DB fez um "belo de um trabalho"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pensei nisso só que nem sempre o max ID é o cargo atual...

O Cara que inseriu as infs no DB fez um "belo de um trabalho"

 

 

Prefiro nem comentar, senão vou ser expulso daqui :devil:

 

Como que você sabe o cargo atual do cara?

Tem como postar a estrutura das tabelas? retiro... você postou :P

Que versão do SQL?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Pensei nisso só que nem sempre o max ID é o cargo atual...

O Cara que inseriu as infs no DB fez um "belo de um trabalho"

 

 

Prefiro nem comentar, senão vou ser expulso daqui :devil:

 

Como que você sabe o cargo atual do cara?

Tem como postar a estrutura das tabelas?

Que versão do SQL?

 

Hahaha nem me fala cara...

Se eu for falar o que está na minha cabeça no momento sou expulso do forum, do trabalho, do prédio e afins

 

Tenho que ordenar pela data_Inicio DESC

Dai ele me traz o cargo atual na primeira linha.

 

Se eu fizer isso aqui:

 

,	idCargo = (SELECT TOP 1 
			CAR.idCargo
		FROM TB_RH_CARGO CAR 
		INNER JOIN TB_RH_FUNCIONARIO_CARGO FUNCAR 
			ON FUNCAR.idCargo = CAR.idCargo 
		WHERE idFuncionario = FUN.idFuncionario 
		ORDER BY FUNCAR.Data_Inicio DESC)

 

funciona mas nem preciso dizer que fazer isso para 7 campos além de porco é totalmente sem performace

SQL 2000 (pra ajudar mais ainda haeuhaeua)

Compartilhar este post


Link para o post
Compartilhar em outros sites

SQL 2000... não estou vendo outro modo senao por subselect, mas.....

estou fazendo um teste deste modo (primordial para teste)

 

declare @Funcionarios table (idFuncionario bigint , Nome varchar(200))
declare @Cargos table (idCargo bigint, Descricao varchar(200))
declare @Secoes table (idSecao bigint , Descricao varchar(200))

declare @Funcionario_Cargo table (idFuncionario bigint, idCargo bigint,  idSecao bigint, Salario money,  Data_Inicio datetime)


insert into @Funcionarios values (1,'FUNCIONARIO A')
insert into @Funcionarios values (2,'FUNCIONARIO B')
insert into @Funcionarios values (3,'FUNCIONARIO C')

INSERT INTO @Cargos VALUES (1, 'CARGO A')
INSERT INTO @Cargos VALUES (2, 'CARGO B')
INSERT INTO @Cargos VALUES (3, 'CARGO C')
INSERT INTO @Cargos VALUES (4, 'CARGO D')

INSERT INTO @Secoes VALUES (1,'SECAO 1')
INSERT INTO @Secoes VALUES (2,'SECAO 2')
INSERT INTO @Secoes VALUES (3,'SECAO 3')

INSERT INTO @Funcionario_Cargo VALUES (1,1,2,100,'2011-05-03')
INSERT INTO @Funcionario_Cargo VALUES (1,2,2,100,'2011-05-03')

SELECT FC.* FROM @Funcionario_Cargo FC 
INNER JOIN @Funcionarios F ON F.idFuncionario = FC.idFuncionario
INNER JOIN @Cargos C ON C.idCargo = FC.idCargo
INNER JOIN @Secoes S ON S.idSecao = FC.idSecao

 

Agora que voce postou que é pela data, estou mudando para tirar os inner...

 

 

 

Já vi que a estrutura que montei é bem diferente da sua..

tem como postar a estrtura das tabelas?

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

SQL 2000... não estou vendo outro modo senao por subselect, mas.....

estou fazendo um teste deste modo (primordial para teste)

 

declare @Funcionarios table (idFuncionario bigint , Nome varchar(200))
declare @Cargos table (idCargo bigint, Descricao varchar(200))
declare @Secoes table (idSecao bigint , Descricao varchar(200))

declare @Funcionario_Cargo table (idFuncionario bigint, idCargo bigint,  idSecao bigint, Salario money,  Data_Inicio datetime)


insert into @Funcionarios values (1,'FUNCIONARIO A')
insert into @Funcionarios values (2,'FUNCIONARIO B')
insert into @Funcionarios values (3,'FUNCIONARIO C')

INSERT INTO @Cargos VALUES (1, 'CARGO A')
INSERT INTO @Cargos VALUES (2, 'CARGO B')
INSERT INTO @Cargos VALUES (3, 'CARGO C')
INSERT INTO @Cargos VALUES (4, 'CARGO D')

INSERT INTO @Secoes VALUES (1,'SECAO 1')
INSERT INTO @Secoes VALUES (2,'SECAO 2')
INSERT INTO @Secoes VALUES (3,'SECAO 3')

INSERT INTO @Funcionario_Cargo VALUES (1,1,2,100,'2011-05-03')
INSERT INTO @Funcionario_Cargo VALUES (1,2,2,100,'2011-05-03')

SELECT FC.* FROM @Funcionario_Cargo FC 
INNER JOIN @Funcionarios F ON F.idFuncionario = FC.idFuncionario
INNER JOIN @Cargos C ON C.idCargo = FC.idCargo
INNER JOIN @Secoes S ON S.idSecao = FC.idSecao

 

Agora que voce postou que é pela data, estou mudando para tirar os inner...

 

 

 

Já vi que a estrutura que montei é bem diferente da sua..

tem como postar a estrtura das tabelas?

 

Abçs

 

Nem tão diferente mas segue abaixo

 

TB_RH_FUNCIONARIO
idFuncionario               int
Nome                        varchar
Sexo                        char
idNacionalidade             int
Data_Nascimento             datetime
idUF_Nascimento             int
idMunicipioNascimento       int
Pai                         varchar
Mae                         varchar
idEstadoCivil               int
Data_Casamento              datetime
Conjuge                     varchar
Data_Admissao               datetime
Data_Demissao               datetime
idEscolaridade              int
Data_EntradaVarejo          datetime
Data_SaidaVarejo            datetime

TB_RH_CARGO
idCargo			int
Codigo			int
Descricao		varchar

TB_RH_SECAO
idSecao			int
Codigo			int
Descricao		varchar

TB_RH_FUNCIONARIO_CARGO
idFuncionarioCargo	int
idFuncionario		int
idCargo			int
idSecao			int
Data_Inicio		datetime
Salario			money

Compartilhar este post


Link para o post
Compartilhar em outros sites

Denis, sem subselect não achei modo de trazer o que precisa. Pode ser que alguem tenha alguma luz para te dar =\

 

Eu acho que o problema realmente esta nesta tabela TB_RH_FUNCIONARIO_CARGO que você vai precisar do id ordenado por data.

O que pode fazer é criar um indice neste dois campos para facilitar sua vida.....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Denis, sem subselect não achei modo de trazer o que precisa. Pode ser que alguem tenha alguma luz para te dar =\

 

Eu acho que o problema realmente esta nesta tabela TB_RH_FUNCIONARIO_CARGO que você vai precisar do id ordenado por data.

O que pode fazer é criar um indice neste dois campos para facilitar sua vida.....

 

É acho que não tem jeito mesmo

Mas enfim cara obrigado por tentar me ajudar

 

PS: Mal vejo a hora de sair desse trampo ¬¬ heheheh

 

Vou trabalhar com BI que eu ganho mais

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

É acho que não tem jeito mesmo

Mas enfim cara obrigado por tentar me ajudar

 

PS: Mal vejo a hora de sair desse trampo ¬¬ heheheh

 

Vou trabalhar com BI que eu ganho mais

 

 

Você esta limitado principalmente pela modelagem cara. Fica bem complicado mesmo.

 

E se você pensa que trabalhar com BI é fácil, vai sonhando :devil:

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

É acho que não tem jeito mesmo

Mas enfim cara obrigado por tentar me ajudar

 

PS: Mal vejo a hora de sair desse trampo ¬¬ heheheh

 

Vou trabalhar com BI que eu ganho mais

 

 

Você esta limitado principalmente pela modelagem cara. Fica bem complicado mesmo.

 

E se você pensa que trabalhar com BI é fácil, vai sonhando :devil:

 

Hahah fácil não é meeeeesmo

Mas que é muito loco é... Se eu tiver oportunidade eu vou sem dó

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.