Tengo una tabla de datos (la base de datos es 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
Me gustaría hacer una consulta que devuelva OrderNO, PartCode y Quantity, pero solo para el último pedido registrado.
De la tabla de ejemplo, me gustaría recuperar la siguiente información:
OrderNO PartCode Quantity
2144 44917 100
7235 11762 5
9999 60657 90
Tenga en cuenta que solo se devolvió una línea para el pedido 9999.
¡Gracias!
sql-server
GEMI
fuente
fuente
MAX(DATE)
devuelve una línea para el pedido 9999?Respuestas:
Si
rownumber() over(...)
está disponible para ti ...fuente
La mejor forma es Mikael Eriksson, si
ROW_NUMBER()
está disponible para usted.La siguiente mejor opción es unirse a una consulta, según la respuesta de Cularis.
Alternativamente, la forma más simple y directa es una subconsulta correlacionada en la cláusula WHERE.
O...
fuente
Esta es la más rápida de todas las consultas proporcionadas anteriormente. El costo de la consulta fue de 0.0070668.
La respuesta preferida anterior, de Mikael Eriksson, tiene un costo de consulta de 0.0146625
Es posible que no le importe el rendimiento de una muestra tan pequeña, pero en consultas grandes, todo suma.
fuente
La consulta interna selecciona todos
OrderNo
con su fecha máxima. Para obtener las otras columnas de la tabla, puede unirlasOrderNo
y elMaxDate
.fuente
Para MySql, puede hacer algo como lo siguiente:
fuente
{ }
) en la barra de herramientas de editor de formato y la sintaxis muy bien resáltala!Y también puede usar esa declaración de selección como consulta de unión izquierda ... Ejemplo:
Espero que esto ayude a alguien que busque esto :)
fuente
rownumber () over (...) está funcionando pero no me gustó esta solución por 2 razones. - Esta función no está disponible cuando utiliza una versión anterior de SQL como SQL2000 - Depende de la función y no es realmente legible.
Otra solucion es:
fuente
Si tiene ID indexado y OrderNo, puede usar IN: (Odio cambiar la simplicidad por oscuridad, solo para guardar algunos ciclos):
fuente
Trate de evitar EN uso JOIN
fuente
Esto funcionó para mí perfectamente bien.
fuente
Esto funciona para mi. use MAX (CONVERT (date, ReportDate)) para asegurarse de tener el valor de la fecha
fuente