Eu tenho a seguinte coluna virtual gerada a partir de um agregado em uma partição classificada,
MIN(picture_id) OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )
No entanto, quando executo isso, recebo o seguinte.
Msg 11305, Level 15, State 10, Line 12
The Parallel Data Warehouse (PDW) features are not enabled.
É aqui que fica interessante, sem uma ordem de classificação na partição, ele funciona:
MIN(picture_id) OVER ( PARTITION BY [360_set] )
Além disso, ROW_NUMBER()
uma função de janela (não uma função agregada) funciona com uma ordem explícita na partição.
ROW_NUMBER() OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )
Como é que a declaração desejada não funciona? Onde isso está documentado? As informações da versão foram solicitadas, é isso que eu em Ajuda → Sobre.
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
O resultado de SELECT @@VERSION
éMicrosoft 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)
sql-server-2008-r2
window-functions
Evan Carroll
fonte
fonte
[360_set]
, ou essa parte é irrelevante? Além disso, a partir do seu comentário, a fórmula que você forneceu funciona apenas como a descrição do texto se não houver lacunas na sequência. Qual você quer?MIN
funciona, é claro, mas altera as linhas no quadro sobre as quaisMIN
é executada.RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
. Portanto, a janela inclui apenas valores compicture_id
valores menores ou iguais aos da linha atual.Respostas:
Este é um erro do analisador que existe apenas no SQL Server 2008. As versões não PDW do SQL Server anteriores a 2012 não oferecem suporte à
ORDER BY
cláusula com funções agregadas, comoMIN
:O suporte à função de janelas foi estendido consideravelmente em 2012, em comparação com a implementação básica disponível a partir do SQL Server 2005. As extensões foram disponibilizadas no Parallel Data Warehouse antes de serem incorporadas ao produto da caixa. Como as várias edições compartilham uma base de código comum, são possíveis mensagens de erro enganosas como essa.
Se você estiver interessado, a pilha de chamadas quando o agregado é verificado pelo analisador é mostrada abaixo. Como o agregado possui uma
OVER
cláusulaORDER BY
, é emitida uma verificação para PDW:Essa verificação falha imediatamente com um erro do analisador:
Felizmente, você não precisa de um agregado em janela que suporte o
ORDER BY
enquadramento para resolver seu problema de código.fonte
Isso será resultado da fusão das bases de código da versão PDW, Azure e box. Começaremos a ver mensagens como esta ou que você não está em uma máquina do Azure ao tentar fazer coisas que foram lançadas apenas no Azure.
Quanto à pergunta de Martin sobre o que são as extensões PDW, esses seriam os recursos da linguagem T-SQL que são implementados apenas no produto Parallel Data Warehouse (PDW).
fonte
ORDER BY
com agregados em janelas não pode ser ativado no SQL Server 2008. O recurso não foi 'extraído', não foi liberado para SQL Server não PDW até a versão 2012.Responder a isso como um elemento da mensagem de erro. Como o @MartinSmith disse acima,
Isso é mencionado oficialmente aqui SQL Server 2008 R2 - Cláusula OVER (Transact-SQL)
Ainda mais significativa é a verbosidade no SQL Server 2012 - Cláusula OVER (Transact-SQL)
Portanto, parece que certamente não está disponível em 2008 - embora essa mensagem de erro seja uma maneira realmente obscura de dizer "não implementado" , e em 2012 parece que a posição oficial da Microsoft é que sua milhagem pode variar .
fonte