Usuário com melhor resposta
Consulta com Union

Pergunta
-
Senhores Boa Tarde, estou com a seguinte dúvida:
Tenha uma tabela de Usuários e outra de Pedidos.
1 – Existem Usuarios com Pedidos
2 - Existem Usuarios com + de 1 Pedido
3 – Existem Usuarios sem Pedidos
Peciso retornar em um select todos os usuários da tabela Usuários e se tiver pedidos a data em que ele fez o pedido... Porém preciso da data de pedido mais recente e somente 1 único registro... Da forma que estou fazendo abaixo ele retorna todos os pedidos que o usuário tem na tabela de Pedidos...
O restante já está ok...Só preciso descobrir como fazer para retornar somente o pedido mais recente quando tiver...
Code SnippetSELECT Usuarios.user_id, Pedidos.data_pedido
FROM Usuarios left JOIN
Pedidos ON (Usuarios.user_id = Pedidos.user_id) AND (Usuarios.user_id <> '')
UNION
SELECT Usuarios.user_id, Pedidos.data_pedido
FROM Pedidos left JOIN
Usuarios ON (Pedidos.user_id = Usuarios.user_id) AND (Pedidos.user_id <> '') AND (Pedidos.data_pedido <> '')
WHERE Pedidos.user_id IS NOT NULL AND Usuarios.user_id IS NOT NULL
Obrigado.
Respostas
-
Boa Tarde JayJr83,
Seja bem vindo à comunidade de SQL Server do MSDN.
Nós participantes do fórum tentaremos ajudá-lo com suas dúvidas e problemas através de nosso conhecimento, disponibilidade e experiência. Se ao final você estiver satisfeito com a resposta, peço que marque-a como respondida para que a solução seja devidamente reconhecida e o sistema de busca melhorado.
Será que a consulta abaixo não resolveria ?
Code SnippetSELECT
Usuarios.user_id, MAX(Pedidos.data_pedido)FROM
Usuarios left JOINPedidos
ON (Usuarios.user_id = Pedidos.user_id) AND (Usuarios.user_id <> '')Os clientes que não tiverem pedidos viram com a data nula.
[ ]s,
Gustavo
Todas as Respostas
-
Boa Tarde JayJr83,
Seja bem vindo à comunidade de SQL Server do MSDN.
Nós participantes do fórum tentaremos ajudá-lo com suas dúvidas e problemas através de nosso conhecimento, disponibilidade e experiência. Se ao final você estiver satisfeito com a resposta, peço que marque-a como respondida para que a solução seja devidamente reconhecida e o sistema de busca melhorado.
Será que a consulta abaixo não resolveria ?
Code SnippetSELECT
Usuarios.user_id, MAX(Pedidos.data_pedido)FROM
Usuarios left JOINPedidos
ON (Usuarios.user_id = Pedidos.user_id) AND (Usuarios.user_id <> '')Os clientes que não tiverem pedidos viram com a data nula.
[ ]s,
Gustavo
-
Boa Tarde Gustavo.
Muito obrigado por seu retorno e obrigado pelas boas vindas.
Sou totalmente leigo em SQL.
Testei seu código e me retornou a seguinte mensagem de erro:
Column 'Usuarios.user_id' is invalid in the select list because is is not contained in an aggregate function and there is no GROUP BY CLause.
Consegui com um amigo o seguinte código:
Code Snippetselect
u.user_id, data_pedido=max(isnull(convert(varchar(10), p.data_pedido, 120), ''))
from usuarios u
left join pedidos p on (p.user_id = u.user_id)
group by u.user_idE estou testando, mais acredito que irá resolver meu problema...
Posto aqui a solução encontrada e se puder verificar o erro da solução que me apresentou fico muito grato tbm...
Abraços.
-
-
Nossa...
Peço desculpas... O código é o mesmo Gustavo... Eu li e reli e só fui perceber isso agora...rs
Estava me concentrando nos resultados e não no que eu estava fazendo... De qualquer forma muitíssimo obrigado...
Vou marcar como resposta.
Abraços.