Eu tenho uma tabela de dados (o banco de dados é MSSQL):
ID OrderNO PartCode Quantity DateEntered
417 2144 44917 100 18-08-11
418 7235 11762 5 18-08-11
419 9999 60657 100 18-08-11
420 9999 60657 90 19-08-11
Gostaria de fazer uma consulta que retorne OrderNO, PartCode e Quantity, mas apenas para o último pedido registrado.
Da tabela de exemplo, gostaria de obter as seguintes informações:
OrderNO PartCode Quantity
2144 44917 100
7235 11762 5
9999 60657 90
Observe que apenas uma linha foi retornada para o pedido 9999.
Obrigado!
sql-server
GEMI
fonte
fonte
MAX(DATE)
retorna uma linha para o pedido 9999?Respostas:
Se
rownumber() over(...)
estiver disponível para você ....fonte
A melhor forma é Mikael Eriksson, se
ROW_NUMBER()
estiver disponível para você.O próximo melhor é participar de uma consulta, conforme a resposta de Cularis.
Alternativamente, a maneira mais simples e direta é uma subconsulta correlacionada na cláusula WHERE.
Ou...
fonte
Esta é a mais rápida de todas as consultas fornecidas acima. O custo da consulta foi 0,0070668.
A resposta preferida acima, de Mikael Eriksson, tem um custo de consulta de 0,0146625
Você pode não se preocupar com o desempenho de uma amostra tão pequena, mas em consultas grandes, tudo se soma.
fonte
A consulta interna seleciona todos
OrderNo
com sua data máxima. Para obter as outras colunas da tabela, você pode juntá-las noOrderNo
e noMaxDate
.fonte
Para o MySql, você pode fazer algo como o seguinte:
fonte
{ }
) na barra de ferramentas do editor de bem formato e sintaxe destacá-lo!E você também pode usar essa instrução select como consulta de junção à esquerda ... Exemplo:
Espero que ajude alguém que procura por isso :)
fonte
rownumber () over (...) está funcionando, mas não gostei desta solução por 2 motivos. - Esta função não está disponível quando você usa uma versão anterior do SQL como SQL2000 - Dependência da função e não é realmente legível.
Outra solução é:
fonte
Se você indexou ID e OrderNo, você pode usar IN: (Eu odeio trocar simplicidade por obscuridade, apenas para salvar alguns ciclos):
fonte
Tente evitar IN use JOIN
fonte
Isso funcionou perfeitamente para mim.
fonte
Isso funciona para mim. use MAX (CONVERT (date, ReportDate)) para se certificar de que tem o valor de data
fonte