Diferentes alias producen diferentes resultados para exactamente la misma consulta
Debajo de dos versiones de la misma consulta exacta
Versión 1 (usa k como alias en SELECT interno):
SELECT k, w_vol,
ROW_NUMBER() OVER (ORDER BY k DESC) AS rank1,
ROW_NUMBER() OVER (ORDER BY w_vol DESC) AS rank2
FROM (
SELECT w_vol, c_date AS k FROM
(SELECT 1590 AS c_date, 1 AS w_vol),
(SELECT 1599 AS c_date, 1 AS w_vol),
(SELECT 1602 AS c_date, 1 AS w_vol),
(SELECT 1609 AS c_date, 2 AS w_vol),
(SELECT 1610 AS c_date, 1 AS w_vol),
)
ORDER BY 1
Versión 2 (usa l como alias en SELECT interno):
SELECT l, w_vol,
ROW_NUMBER() OVER (ORDER BY l DESC) AS rank1,
ROW_NUMBER() OVER (ORDER BY w_vol DESC) AS rank2
FROM (
SELECT w_vol, c_date AS l FROM
(SELECT 1590 AS c_date, 1 AS w_vol),
(SELECT 1599 AS c_date, 1 AS w_vol),
(SELECT 1602 AS c_date, 1 AS w_vol),
(SELECT 1609 AS c_date, 2 AS w_vol),
(SELECT 1610 AS c_date, 1 AS w_vol),
)
ORDER BY 1
A continuación se muestra la salida que recibo constantemente para ambas consultas (notaNo Cached Results
se usa)
No tengo ningún problema para entender por qué se genera este o aquel resultado (es relativamente trivial) - PERO - Esperaba que el resultado fuera el mismo sin importar qué alias se usara - ¡es solo un alias!
Pregunta: ¿Por qué constantemente obtengo un resultado para la Versión 1 y otro para la Versión 2?
Nota: ¡No me interesan las recomendaciones sobre cómo volver a escribir la consulta de manera diferente para "ocultar" el problema! Por favor, no te molestes con las respuestas en esta dirección!
Forgot to mention:
La mayoría de los alias producen el mismo resultado que con 'l', pero muy pocos como con 'k'. Otro ejemplo de tal es 'x'. Solo quería dejarlo claro: no es solo un alias en particular lo que es problemático. Y aún más: el alias problemático depende del nombre de los archivos.
Así que creo que es un problema de hashing que involucra nombres de campos / alias, ¡pero esta es mi suposición!