Usuário com melhor resposta
Join com 3 Tables

Pergunta
-
Boa noite.
Estou inciando em SQLServer e tenho este problema.
O senário é o seguinte.
-----------------------
EQUIPAMENTOS
-----------------------
IDEQUIPAMENTO
NOME
ETC
-----------------------
MOVIMENTACAOEQUIPAMENTO
-----------------------
IDMOVEQUI
IDESTUDIO
DESCRICAO
ETC
-----------------------
ESTUDIO
-----------------------
IDESTUDIO
NOME
ETC
A Tabela ESTUDIO se relaciona com a tabela EQUIPAMENTOS através da movimentação, onde o que me mostra o local atual de um equipamento é sempre o ultimo registro da tabela MOVIMENTACAOEQUIPAMENTO para este equipamento.
Entao, eu preciso retornar todos os registros de equipamentos relacionando somente a ultima movimentação de cada equipamento.
Ja tentei varios Joins, Usei o LINQPad para afim de tentar resolver com LINQ para ver qual consulta me retornaria porem sem sucesso. Obrigado.
Respostas
-
Boa noite,
Experimente desta forma:
with CTE as ( select idEquip, idEstudio, ROW_NUMBER() OVER(PARTITION BY idEquip ORDER BY idEquipMov DESC) as RowNum from [dbo].[EquipsMovs] ) select eq.*, es.* from [dbo].[Equips] as eq join CTE as c on c.idEquip = eq.idEquip and c.RowNum = 1 join Estudios as es on es.idEstudio = c.idEstudio
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Soró domingo, 7 de outubro de 2012 02:18
Todas as Respostas
-
Consegui Resolver assim. Adicionei a coluna com idEstudio da ultima movimentação e por ultimo fiz um INNER JOIN utilizando esse campo.
Não sei se é a melhor opção, se alguem ainda tiver uma solução mais eficiente eu agradeço.
SELECT
*,
[Project1].[c1] AS UltimaEstudio
FROM ( SELECT
*,
(SELECT
TOP(1)[Extent2].idEstudio
FROM [dbo].[EquipsMovs] AS [Extent2]
WHERE [Extent1].[idEquip] = [Extent2].[idEquip] ORDER BY [Extent2].idEquipMov DESC ) AS [C1]
FROM [dbo].[Equips] AS [Extent1]
) AS [Project1]
INNER JOIN Estudios AS [Extent4] ON [Extent4].idEstudio = [Project1].C1 -
Boa noite,
Experimente desta forma:
with CTE as ( select idEquip, idEstudio, ROW_NUMBER() OVER(PARTITION BY idEquip ORDER BY idEquipMov DESC) as RowNum from [dbo].[EquipsMovs] ) select eq.*, es.* from [dbo].[Equips] as eq join CTE as c on c.idEquip = eq.idEquip and c.RowNum = 1 join Estudios as es on es.idEstudio = c.idEstudio
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Soró domingo, 7 de outubro de 2012 02:18
-