He pegado una versión muy simplificada de mi consulta SQL a continuación. El problema que me estoy encontrando es que la declaración ORDER BY
está afectando los resultados de selección de mi CTE. No he podido entender por qué esto es así, mi pensamiento original fue que dentro del CTE, ejecuto alguna declaración SELECT
, entonces el ORDER BY
debería funcionar en ESOS resultados.SQL CTE y ORDER BY afectando el conjunto de resultados
Lamentablemente, el comportamiento que estoy viendo es que mi declaración interna SELECT
se ve afectada por el orden por, dándome 'elementos' que no están en el TOP 10
.
Aquí es un ejemplo de los datos: (indexados en orden inverso por ID)
ID, Date
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9594 2010-08-06
9593 2010-08-05
9592 2010-08-02
....
9573 2010-08-10
....
8174 2010-08-05
....
38 2029-12-20
Mi consulta básica:
;with results as(
select TOP 10 ID, Date
from dbo.items
)
SELECT ID
FROM results
devuelve la consulta:
ID, Date
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9594 2010-08-06
9593 2010-08-05
9592 2010-08-02
Mi consulta con la consulta ORDER BY
;with results as(
select TOP 10 ID, Date
from dbo.items
)
SELECT ID
FROM results
ORDER BY Date DESC
regresa:
ID, Date
38 2029-12-20
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9573 2010-08-10
9594 2010-08-06
8174 2010-08-05
¿Alguien puede explicar por qué la primera consulta sólo devolverá los identificadores que están en el top 10 de la tabla, y la segunda consulta devuelve los 10 mejores de toda la tabla (después de aplicar la clasificación).
Supongo que quería que devuelva las 10 filas superiores de la tabla, y luego ordenar las 10 filas superiores, no ordenar toda la tabla y choo se los 10 primeros de ese conjunto ... ¿dónde está mi malentendido? – Brett
@Brett - Necesita decirle a la base de datos a qué se refiere con "las 10 filas superiores de la tabla". Los 10 principales según qué métrica? Tal vez ordenados por fecha? –
Entonces, ¿está diciendo que necesito un pedido dentro del CTE? Entonces: '; con resultados como (SELECCIONAR ID TOP 10, FechaPublicada de artículos ORDER BY ID desc)'? .... ¿Mi confusión surge de por qué un 'ORDER BY' fuera del CTE está afectando los resultados de CTE? – Brett