[RESOLVIDO] Como fazer essa query ? (SQL Server - dialeto T-SQL)
4 respostas
jMarcel
Pessoal,
tenho uma tabela conforme abaixo e quero fazer uma query p/ extrair clientes distintos que tem a maior data.
Por ex.: o cliente ‘BBBB’ tem a maior data = ‘03/08/2011’, logo o resultado p/ ele seria a linha 5 da tb1.
Faça um select agrupando pelo nome, com a maior data (max).
Depois faça um select novamente nesta tabela, fazendo um join com o resultado da primeira parte aí em cima.
(O join por nome e data)
Pode haver um pequeno problema nessa abordagem porém: as datas podem se repetir?
Se puderem, você terá que criar um critério desempate…como o campo cod por exemplo (imagino que seja sua pk).
Neste caso você acha a maior data (com a primeira parte), usa a mesma técnica para achar o maior código das maiores datas e por fim, faz um join por código com a tabela principal.
jMarcel
AbelBueno:
Faça um select agrupando pelo nome, com a maior data (max).
Depois faça um select novamente nesta tabela, fazendo um join com o resultado da primeira parte aí em cima.
(O join por nome e data)
Pode haver um pequeno problema nessa abordagem porém: as datas podem se repetir?
Se puderem, você terá que criar um critério desempate…como o campo cod por exemplo (imagino que seja sua pk).
Neste caso você acha a maior data (com a primeira parte), usa a mesma técnica para achar o maior código das maiores datas e por fim, faz um join por código com a tabela principal.
Entendi. Assim ficou mais fácil, pois as datas são únicas para cada cliente.
A quem interessar possa (tb1 = tbClientes x tbProdutos) :
with cte as (
select distinct x.cod, x.Nome, max(y.Data) as Data
from tbClientes x
left join tbProdutos y on x.cod=y.cod
group by x.cod, x.Nome
)
select distinct cte.cod, cte.Nome, cte.Data, y.Item
from cte
inner join tbProdutos y on cte.cod=y.cod and cte.Data=y.Data
Valeu pela força !
novato25
Uma consulta SQL poderia ficar assim:
SELECT t1.* FROM tb1 t1 JOIN
(SELECT MAX(t.data) AS data, t.cod FROM tb1 t GROUP BY t.cod) tb2
on t1.cod = tb2.cod and t1.data = tb2.data ORDER BY t1.cod
já a consulta T-SQL, bom, aí teria que se pensar mais um pouco.
jMarcel
novato25:
Uma consulta SQL poderia ficar assim:
SELECT t1.* FROM tb1 t1 JOIN
(SELECT MAX(t.data) AS data, t.cod FROM tb1 t GROUP BY t.cod) tb2
on t1.cod = tb2.cod and t1.data = tb2.data ORDER BY t1.cod
já a consulta T-SQL, bom, aí teria que se pensar mais um pouco.
O post já foi Resolvido, mas obrigado pela sua participação !!