Saya memiliki kolom virtual berikut yang dihasilkan dari agregat di atas partisi yang diurutkan,
MIN(picture_id) OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )
Namun, ketika saya mengeksekusi itu, saya mendapatkan yang berikut.
Msg 11305, Level 15, State 10, Line 12
The Parallel Data Warehouse (PDW) features are not enabled.
Di sinilah ia menjadi menarik, tanpa urutan di partisi, ia berfungsi:
MIN(picture_id) OVER ( PARTITION BY [360_set] )
Dan, lebih jauh, ROW_NUMBER()
fungsi jendela (bukan fungsi agregat) bekerja dengan urutan eksplisit pada partisi.
ROW_NUMBER() OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )
Kenapa pernyataan yang diinginkan tidak berhasil? Di mana ini didokumentasikan? Informasi versi diminta, inilah yang saya dalam Bantuan → Tentang.
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
Hasil dari SELECT @@VERSION
isMicrosoft 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
sumber
sumber
[360_set]
, atau bagian itu tidak relevan? Juga, dari komentar Anda, rumus yang Anda berikan hanya berfungsi seperti deskripsi teks jika tidak ada kesenjangan dalam urutan. Yang kamu inginkanMIN
kerjanya tentu saja, tetapi itu mengubah baris dalam bingkai yangMIN
dilakukan.RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
. Jadi jendela hanya menyertakan nilai denganpicture_id
nilai kurang dari atau sama dengan yang ada di baris saat ini.Jawaban:
Ini adalah bug parser yang hanya ada di SQL Server 2008. Versi SQL Server non-PDW sebelum 2012 tidak mendukung
ORDER BY
klausa dengan fungsi agregat sepertiMIN
:Dukungan fungsi windowing sangat diperpanjang pada tahun 2012, dibandingkan dengan implementasi dasar yang tersedia mulai dengan SQL Server 2005. Ekstensi dibuat tersedia di Gudang Data Paralel sebelum dimasukkan dalam produk kotak. Karena berbagai edisi berbagi basis kode yang umum, pesan kesalahan yang menyesatkan seperti ini dimungkinkan.
Jika Anda tertarik, tumpukan panggilan saat agregat diverifikasi oleh parser ditunjukkan di bawah ini. Karena agregat memiliki
OVER
klausa denganORDER BY
, cek untuk PDW dikeluarkan:Pemeriksaan ini segera gagal dengan kesalahan parser:
Untungnya, Anda tidak memerlukan agregat berjendela yang mendukung
ORDER BY
pembingkaian untuk menyelesaikan masalah kode Anda.sumber
Ini akan menjadi hasil dari penggabungan basis kode PDW, Azure dan versi kotak. Kami akan mulai melihat pesan seperti ini atau bahwa Anda tidak menggunakan mesin Azure saat mencoba melakukan hal-hal yang hanya dirilis di Azure.
Adapun pertanyaan Martin tentang apa ekstensi PDW itu, ini akan menjadi fitur dari bahasa T-SQL yang hanya diimplementasikan dalam produk Parallel Data Warehouse (PDW).
sumber
ORDER BY
dengan agregat berjendela tidak dapat diaktifkan di SQL Server 2008. Fitur ini tidak 'ditarik', itu tidak dirilis untuk SQL Server non-PDW hingga rilis 2012.Menjawab ini sebagai elemen pesan kesalahan. Seperti @MartinSmith katakan di atas,
Ini disebutkan secara resmi di sini SQL Server 2008 R2 - OVER Clause (Transact-SQL)
Yang lebih penting adalah verbiage di SQL Server 2012 - OVER Clause (Transact-SQL)
Jadi, sepertinya itu tentu tidak tersedia pada tahun 2008 - meskipun pesan kesalahan adalah cara yang sangat jelas mengatakan "tidak dilaksanakan" , dan pada tahun 2012 sepertinya sikap resmi Microsoft adalah Anda mungkin berbeda .
sumber