ورود

View Full Version : سوال: راهنمایی در مورد یک کوئری



mehdi_moosavi
شنبه 28 فروردین 1389, 13:44 عصر
سلام بدوستان
فرض کنید مشخصات یکسری دانش آموز را در یک جدول داریم و یکی از فیلدها سن دانش آموز است.
من احتیاج به دستوری دارم که از هر سن فقط 10 تای اول را بیاورد. یعنی 10 تا 10 ساله و بعد 10 تا 11 ساله و بعد 10 تا 12 ساله و ... (یعنی از هر سنی فقط 10 تای اول)
لطفا راهنمایی کنید
با تشکر

محمد سلیم آبادی
شنبه 28 فروردین 1389, 21:20 عصر
SELECT *
FROM (SELECT *, Row_ID = ROW_NUMBER() OVER(PARTITION BY years_old ORDER BY student_ID ASC)
FROM table_student) AS D
WHERE Row_ID <=10

zmmehrdad
یک شنبه 29 فروردین 1389, 01:04 صبح
بسیار عالی بود

Modernidea
یک شنبه 29 فروردین 1389, 01:19 صبح
SELECT *
FROM (SELECT *, Row_ID = ROW_NUMBER() OVER(PARTITION BY years_old ORDER BY student_ID ASC)
FROM table_student) AS D
WHERE Row_ID <=10


یه توضیح کوچیک میدید؟

Row_ID به عنوان یک کانتر استفاده میشه؟ چجوری؟ :متفکر:

محمد سلیم آبادی
یک شنبه 29 فروردین 1389, 01:25 صبح
یه توضیح کوچیک میدید؟

Row_ID به عنوان یک کانتر استفاده میشه؟ چجوری؟ :متفکر:

من با کمک تابع ROW_NUMBER که جز توابع Ranking هست ابتدا سطرها را به بخشهایی تقسیم کردم بخشهایی که همه ی اعضای آن دارای یک مقدار یکسان در ستون سال هستند. سپس به هر بخش یک شماره از 1 تا n دادم (به ترتیب شماره دانش آموزی)
چون نمی توان از نام آن ستون (row_id) در همان SELECT استفاده کرد دوباره یک SELECT بیرونی گرفتم و فیلتر را اعمال کردم.