PDA

View Full Version : بدست آوردن n امین رکورد از یک کوئری



ezamnejad
سه شنبه 14 شهریور 1391, 09:39 صبح
با سلام
من به یک دستور نیاز دارم که مثلا رکورد شماره 5 از یک کوئری را جستجو کند. ممکنه یک کوئری 1000 تا رکورد داشته باشه ولی من رکورد شماره 5 از این کوئری را میخوام
با تشکر

حمیدرضاصادقیان
سه شنبه 14 شهریور 1391, 10:35 صبح
سلام.
اگر جدول شما دارای ID باشه میتوانید از طریق شرط Where به این مورد دسترسی پیدا کنید.
مثال

select * from table1 where id=5


یا اگر یک همچین فیلدی ندارید میتوانید از Row_Number استفاده کنید.

ezamnejad
سه شنبه 14 شهریور 1391, 12:40 عصر
با تشکر از آقای صادقیان
با دستور Row_Count مشکلم حل شد

WITH test AS
(
SELECT [Name],ROW_NUMBER()OVER(ORDER BY Code) AS row FROM MyTable
)
SELECT row,[Name] FROM test WHERE row=5

ASKaffash
چهارشنبه 15 شهریور 1391, 07:26 صبح
سلام


Select Top 1 *
From
(Select Top 5 * From Tbl Order By A) T
Order By B Desc

ezamnejad
چهارشنبه 15 شهریور 1391, 07:40 صبح
از پاسختون ممنونم
فقط کدام یک از این دوکد از لحاظ سرعت کارایی بهتری داره؟

حمیدرضاصادقیان
چهارشنبه 15 شهریور 1391, 09:10 صبح
کد شما از لحاظ سرعتی بهتره به خاطر اینکه در کد دوم یک Order by Desc هست که جدول رو مجبوره Scan بکنه ولی در کد شما جدول Scan نمیشه که باز از لحاظ Performance بهتره.

tooraj_azizi_1035
شنبه 18 شهریور 1391, 08:59 صبح
آیا برای بدست آوردن رکورد یکی مانده به آخر اینطور باید نوشت؟

;WITH CTEs
AS
(SELECT DENSE_RANK() OVER(ORDER BY CustomerID ASC) Nth,* FROM Customers)
SELECT * FROM CTEs WHERE Nth= (SELECT MAX(CTEs.Nth) FROM CTEs)-1

یا اینکه راه سریعتری هم هست؟

ASKaffash
یک شنبه 19 شهریور 1391, 06:54 صبح
سلام
اگر ایندکس مناسب باشد Table Scan اتفاق نمی افتد (همان ستون جلوی Order By)