Tengo la siguiente columna virtual generada a partir de un agregado sobre una partición ordenada,
MIN(picture_id) OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )
Sin embargo, cuando ejecuto eso, obtengo lo siguiente.
Msg 11305, Level 15, State 10, Line 12
The Parallel Data Warehouse (PDW) features are not enabled.
Sin embargo, aquí es donde se pone interesante, sin un orden de clasificación en la partición, funciona:
MIN(picture_id) OVER ( PARTITION BY [360_set] )
Y, además, ROW_NUMBER()
una función de ventana (no una función agregada) funciona con un orden explícito en la partición.
ROW_NUMBER() OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )
¿Cómo es que la declaración deseada no funciona? ¿Dónde se documenta esto? Se solicitó la información de la versión, esto es lo que hice en Ayuda → Acerca de.
Microsoft SQL Server Management Studio 10.0.5512.0
Microsoft Analysis Services Client Tools 10.0.5500.0
Microsoft Data Access Components (MDAC) 6.1.7601.17514
Microsoft MSXML 3.0 6.0
Microsoft Internet Explorer 9.10.9200.16635
Microsoft .NET Framework 2.0.50727.5472
Operating System 6.1.7601
El resultado de SELECT @@VERSION
esMicrosoft SQL Server 2008 (SP3) - 10.0.5512.0 (X64) Aug 22 2012 19:25:47 Copyright (c) 1988-2008 Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (VM)
fuente
[360_set]
o esa parte es irrelevante? Además, según su comentario, la fórmula que proporcionó solo funciona como la descripción del texto si no hay espacios en la secuencia. ¿Cuál quieres?MIN
supuesto, no afecta la forma en que funciona, pero sí cambia las filas en el marco sobre el queMIN
se realiza.RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
. Por lo tanto, la ventana solo incluye valores conpicture_id
valores menores o iguales a los de la fila actual.Respuestas:
Este es un error del analizador que existe solo en SQL Server 2008. Las versiones no PDW de SQL Server anteriores a 2012 no admiten la
ORDER BY
cláusula con funciones agregadas comoMIN
:El soporte de la función de ventanas se amplió considerablemente en 2012, en comparación con la implementación básica disponible a partir de SQL Server 2005. Las extensiones se pusieron a disposición en Parallel Data Warehouse antes de incorporarse al producto de la caja. Debido a que las diversas ediciones comparten una base de código común, son posibles mensajes de error engañosos como este.
Si está interesado, la pila de llamadas cuando el analizador verifica el agregado se muestra a continuación. Debido a que el agregado tiene una
OVER
cláusula conORDER BY
, se emite un cheque para PDW:Esta comprobación falla inmediatamente con un error de analizador:
Afortunadamente, no necesita un agregado con ventana que admita el
ORDER BY
encuadre para resolver su problema de código.fuente
Esto va a ser el resultado de la fusión de las bases de código de PDW, Azure y la versión de caja. Comenzaremos a ver mensajes como este o que no está en una máquina Azure cuando intente hacer cosas que solo se han lanzado en Azure.
En cuanto a la pregunta de Martin sobre cuáles son las extensiones PDW, estas serían las características del lenguaje T-SQL que solo se implementan en el producto Parallel Data Warehouse (PDW).
fuente
ORDER BY
con los agregados en ventana no se pueden habilitar en SQL Server 2008. La función no se 'extrajo', no se lanzó para SQL Server que no sea PDW hasta la versión 2012.Respondiendo esto como un elemento del mensaje de error. Como @MartinSmith dijo anteriormente,
Esto se menciona oficialmente aquí SQL Server 2008 R2 - Cláusula OVER (Transact-SQL)
Aún más significativo es el verborrea en SQL Server 2012 - Cláusula OVER (Transact-SQL)
Por lo tanto, parece que ciertamente no está disponible en 2008, aunque ese mensaje de error es una forma realmente oscura de decir "no implementado" , y en 2012 parece que la postura oficial de Microsoft es que su kilometraje puede variar .
fuente