UPDATE COM WHERE DE VARIOR REGISTROS SQL SERVER
Olá pessoal, estou com seguinte questão
Tenho a seguinte Query:
Campo1 = Int
Campo2 = Date
Campo3 = String
As talela1 e Tabela2 são identicas, se der para fazer tudo na tabela 1 resolve tb até fica melhor, não precisa duplicar as tabelas..
Update Tabela1
Set Campo3 = "R"
[txt-color=#e80000]Where Campo1 = (Select b.Campo1, Max(b.campo2) as UltimaData From Tabela2 b Where... Group By b.Campo1)[/txt-color]
A idéia é colocar "R" nos Campo3 que possuam a Maior Data em cada Grupo. Os registros que receberão o "R" pode ser de 0 a uma centena.
Problemas em vermelho que não sei como fazer: nao aceita multiplos registros no Select e no select tem dois Campos por causa do Group.
Exempo
Campo1 Campo2 Campo3
959 2023-03-17 G
959 2023-03-18 G
959 2023-03-19 G
970 2023-03-15 G
970 2023-03-17 G
Resultado após o update. Note os resgistros em Vermelho receberam "R":
Campo1 Campo2 Campo3
959 2023-03-17 G
959 2023-03-18 G
[txt-color=#e80000]959 2023-03-19 R[/txt-color]
970 2023-03-15 G
[txt-color=#e80000]970 2023-03-17 R[/txt-color]
Como Posso resolver está questão em uma só query, tem como?
Grato
Tenho a seguinte Query:
Campo1 = Int
Campo2 = Date
Campo3 = String
As talela1 e Tabela2 são identicas, se der para fazer tudo na tabela 1 resolve tb até fica melhor, não precisa duplicar as tabelas..
Update Tabela1
Set Campo3 = "R"
[txt-color=#e80000]Where Campo1 = (Select b.Campo1, Max(b.campo2) as UltimaData From Tabela2 b Where... Group By b.Campo1)[/txt-color]
A idéia é colocar "R" nos Campo3 que possuam a Maior Data em cada Grupo. Os registros que receberão o "R" pode ser de 0 a uma centena.
Problemas em vermelho que não sei como fazer: nao aceita multiplos registros no Select e no select tem dois Campos por causa do Group.
Exempo
Campo1 Campo2 Campo3
959 2023-03-17 G
959 2023-03-18 G
959 2023-03-19 G
970 2023-03-15 G
970 2023-03-17 G
Resultado após o update. Note os resgistros em Vermelho receberam "R":
Campo1 Campo2 Campo3
959 2023-03-17 G
959 2023-03-18 G
[txt-color=#e80000]959 2023-03-19 R[/txt-color]
970 2023-03-15 G
[txt-color=#e80000]970 2023-03-17 R[/txt-color]
Como Posso resolver está questão em uma só query, tem como?
Grato
Aqui, fiz um fiddle pra fazer isso, mas já advirto, ficou complexo...
Boa noite.
Fiz uma versão utilizando um update apenas.
Observação: Caso existam duas ou mais maiores datas para o mesmo grupo, ambas serão atualizadas.
Fiz uma versão utilizando um update apenas.
Observação: Caso existam duas ou mais maiores datas para o mesmo grupo, ambas serão atualizadas.
DECLARE @ExemploTabela AS TABLE
(
campo1 int,
campo2 date,
campo3 char(1)
)
INSERT INTO @ExemploTabela (campo1, campo2, campo3) VALUES
(959, "2023-03-17", "G"), (959, "2023-03-18", "G"), (959, "2023-03-19", "G"),
(970, "2023-03-15", "G"), (970, "2023-03-17", "G")
UPDATE
t1
SET
campo3 = "R"
FROM
@ExemploTabela t1 INNER JOIN
(SELECT campo1, MAX(campo2) campo2 FROM @ExemploTabela GROUP BY campo1) t2 ON t1.campo1 = t2.campo1 and t1.campo2 = t2.campo2
SELECT * FROM @ExemploTabela -- mostrando registros atualizados
DS2T, dá hora, perfeito.
Tu é bom nisso hen?
Agradeço o Keplunk tb que funciou muito bem. Só um pouco mais extenso.
Obrigado.
Tu é bom nisso hen?
Agradeço o Keplunk tb que funciou muito bem. Só um pouco mais extenso.
Obrigado.
Tópico encerrado , respostas não são mais permitidas