Saya ingin mengembalikan 10 catatan teratas dari setiap bagian dalam satu permintaan. Adakah yang bisa membantu dengan cara melakukannya? Bagian adalah salah satu kolom dalam tabel.
Database adalah SQL Server 2005. Saya ingin mengembalikan 10 besar berdasarkan tanggal yang dimasukkan. Bagian adalah bisnis, lokal, dan fitur. Untuk satu tanggal tertentu saya hanya menginginkan baris bisnis teratas (10) (entri terbaru), baris lokal top (10), dan fitur top (10).
Jawaban:
Jika Anda menggunakan SQL 2005 Anda dapat melakukan sesuatu seperti ini ...
Jika RankCriteria Anda memiliki ikatan maka Anda dapat mengembalikan lebih dari 10 baris dan solusi Matt mungkin lebih baik untuk Anda.
sumber
DENSE_RANK
yang tidak memiliki kesenjangan dalam penomoran. +1Dalam T-SQL, saya akan melakukan:
sumber
ROW_NUMBER
fungsi ini. Sebagai contoh, saya telah menggunakan solusi ini dalam SQLite.Ini berfungsi pada SQL Server 2005 (diedit untuk mencerminkan klarifikasi Anda):
sumber
sumber
r
. tetap.Saya melakukannya dengan cara ini:
pembaruan: Contoh ini dari GROUP BY hanya berfungsi di MySQL dan SQLite, karena database tersebut lebih permisif daripada SQL standar tentang GROUP BY. Sebagian besar implementasi SQL mengharuskan semua kolom dalam daftar pilih yang bukan bagian dari ekspresi agregat juga dalam GROUP BY.
sumber
Jika kita menggunakan SQL Server> = 2005, maka kita dapat menyelesaikan tugas dengan satu pilih saja:
sumber
top 1
karya dengancase
pernyataan dalamorder by
klausa yang mengembalikan 0 atau 1?Jika Anda tahu bagian apa itu, Anda dapat melakukannya:
sumber
Saya tahu utas ini agak lama tetapi saya baru saja mengalami masalah serupa (pilih artikel terbaru dari setiap kategori) dan ini adalah solusi yang saya buat:
Ini sangat mirip dengan solusi Darrel tetapi mengatasi masalah RANK yang mungkin menghasilkan lebih banyak baris daripada yang dimaksudkan.
sumber
JOIN
bukanLEFT JOIN
, karena tidak akan pernah ada catatan untukTopCategoryArticles
tanpa sesuaiArticle
catatan.Mencoba yang berikut dan bekerja dengan ikatan juga.
sumber
Jika Anda ingin menghasilkan keluaran yang dikelompokkan berdasarkan bagian, hanya menampilkan catatan atas n dari setiap bagian seperti ini:
... maka berikut ini harus bekerja cukup umum dengan semua database SQL. Jika Anda menginginkan 10 teratas, cukup ubah 2 menjadi 10 di akhir kueri.
Untuk mengatur:
sumber
Mungkinkah operator UNION bekerja untuk Anda? Memiliki satu PILIH untuk setiap bagian, lalu UNION bersama-sama. Kira itu hanya akan bekerja untuk sejumlah bagian yang tetap.
sumber
T) Menemukan catatan TOP X dari setiap grup (Oracle)
6 baris dipilih.
sumber
Sementara pertanyaannya adalah tentang SQL Server 2005, kebanyakan orang telah pindah dan jika mereka menemukan pertanyaan ini, apa yang bisa menjadi jawaban yang lebih disukai dalam situasi lain adalah salah satu menggunakan
CROSS APPLY
seperti yang diilustrasikan dalam posting blog ini .Kueri ini melibatkan 2 tabel. Permintaan OP hanya melibatkan 1 tabel, dalam hal solusi berbasis fungsi jendela mungkin lebih efisien.
sumber
Anda dapat mencoba pendekatan ini. Kueri ini mengembalikan 10 kota terpadat untuk setiap negara.
sumber