2009-02-05 11 views

Respuesta

24

no has podido hacer algo así como

SELECT ... FROM ... 
WHERE PK NOT IN (SELECT TOP 10 PK FROM ...) 
ORDER BY ... 

que podría no ser tan eficiente, pero esa es la única forma en la parte superior de la cabeza se me ocurre hacer algo así. Que yo sepa no hay ninguna cláusula de "fondo" en SQL :)

+0

que lo hizo, gracias! –

+0

Fue una pregunta de entrevista para mí una vez. Respondí de manera similar –

6
SELECT ... FROM .... 
WHERE myID NOT IN 
    (SELECT TOP 10 myID FROM ... ORDER BY rankfield) 
ORDER BY sortfield 

en cuenta que su orden de clasificación podría, (si lo desea) ser diferente de su orden de puntuación.

Editar: Otra idea: si ya supiera cuántas filas totales fueron de allí, se puede hacer (suponiendo 1000 filas):

SELECT TOP 990 ... FROM .... ORDER BY sortfield DESC 

sólo tapa la clase, y toman la porción restante.

Por supuesto, si todavía quería que los resultados en el orden original, que tendría que hacer algo tonto como:

SELECT ... 
FROM (SELECT TOP 990 ... FROM .... ORDER BY sortfield DESC) 
ORDER BY sortfield ASC 
+0

Me esperaba que este último sea mucho más rápido que NOT IN, porque NOT IN no usa los índices de manera eficiente. De hecho, podría ser más rápido obtener el conteo de registros con DCount() y luego obtener el resto de los registros. –

3

Esto es algo que a menudo se hace mejor en el lado del cliente, más bien en el DBMS, es decir, buscar todas las filas de la tabla en un conjunto de registros ADO Classic y luego usar la propiedad Filter para eliminar las 10 filas basadas en criterios, o Ordenar y configurar, luego omita las primeras/últimas 10 filas, o configure la longitud de la página según corresponda; omita la primera/última página, etc. No solo depende del número de filas, sino también de la aplicación de destino, p. Sé que si esta es la fuente de datos para un informe de MS Access, filtrar las filas no deseadas puede ser una gran molestia.

Cuestiones relacionadas