Quiero devolver los 10 mejores registros de cada sección en una consulta. ¿Alguien puede ayudar con cómo hacerlo? La sección es una de las columnas de la tabla.
La base de datos es SQL Server 2005. Quiero devolver los 10 mejores por fecha ingresada. Las secciones son comerciales, locales y de características. Para una fecha en particular, solo quiero las primeras (10) filas comerciales (entrada más reciente), las principales (10) filas locales y las principales (10) características.
Respuestas:
Si está utilizando SQL 2005, puede hacer algo como esto ...
Si su RankCriteria tiene vínculos, puede devolver más de 10 filas y la solución de Matt puede ser mejor para usted.
fuente
DENSE_RANK
lo que no tiene lagunas en la numeración. +1En T-SQL, haría:
fuente
ROW_NUMBER
función. Por ejemplo, he usado esta solución en SQLite.Esto funciona en SQL Server 2005 (editado para reflejar su aclaración):
fuente
fuente
r
. fijo.Lo hago de esta manera:
actualización: este ejemplo de GROUP BY funciona solo en MySQL y SQLite, porque esas bases de datos son más permisivas que SQL estándar con respecto a GROUP BY. La mayoría de las implementaciones de SQL requieren que todas las columnas de la lista de selección que no forman parte de una expresión agregada también estén en GROUP BY.
fuente
Si usamos SQL Server> = 2005, entonces podemos resolver la tarea con una sola selección :
fuente
top 1
funciona el uso con lacase
declaración en laorder by
cláusula que devuelve 0 o 1?Si sabe cuáles son las secciones, puede hacer:
fuente
Sé que este hilo es un poco viejo, pero acabo de encontrarme con un problema similar (seleccione el artículo más nuevo de cada categoría) y esta es la solución que se me ocurrió:
Esto es muy similar a la solución de Darrel, pero supera el problema de RANGO que podría devolver más filas de lo previsto.
fuente
JOIN
lugar deLEFT JOIN
, ya que nunca habrá un registroTopCategoryArticles
sin unArticle
registro correspondiente .Intenté lo siguiente y funcionó con lazos también.
fuente
Si desea generar una salida agrupada por sección, muestre solo los n registros superiores de cada sección de forma similar a esto:
... entonces lo siguiente debería funcionar de manera bastante genérica con todas las bases de datos SQL. Si desea los 10 primeros, simplemente cambie el 2 a 10 hacia el final de la consulta.
Para configurar:
fuente
¿Podría el operador UNION trabajar para usted? Tenga un SELECCIONAR para cada sección, luego UNIRlos juntos. Sin embargo, supongo que solo funcionaría para un número fijo de secciones.
fuente
Q) Encontrar registros TOP X de cada grupo (Oracle)
6 filas seleccionadas.
fuente
Si bien la pregunta era sobre SQL Server 2005, la mayoría de las personas ha seguido adelante y, si encuentran esta pregunta, cuál podría ser la respuesta preferida en otras situaciones es la que se utiliza
CROSS APPLY
como se ilustra en esta publicación de blog .Esta consulta involucra 2 tablas. La consulta del OP solo involucra 1 tabla, en caso de que una solución basada en la función de ventana sea más eficiente.
fuente
Puedes probar este enfoque. Esta consulta devuelve las 10 ciudades más pobladas de cada país.
fuente