PDA

View Full Version : سوال: نحوه بازیابی آخرین رکورد موجود در جدول



mrmohsen
شنبه 31 مرداد 1388, 22:03 عصر
با سلام خدمت دوستان

من مشکلی دارم که میخوام جدیترین ردیف از یه جدولو بگیرم از اونجایی که من نگاه میکنم با وارد کردن رکورد جدید به آخرین رکورد جدول اضافه میشه حالا من اون جدیترین رکورد ورودی رو میخوام
البته اگه اولش بود با دستور Select TOP می گرفتمش ولی چون آخر جدوله مشکل داشتم اگه دوستان راهمنایی کنن ممنون میشم

محمد سلیم آبادی
شنبه 31 مرداد 1388, 22:33 عصر
سلام،
برای رسیدن به خواستتون راههای زیادی وجود دارد.



SELECT Boatname
FROM boats
EXCEPT
SELECT TOP((SELECTCOUNT(*)FROM boats)-1) boatname
FROM boats



SELECT TOP 1 * FROM [tableName] ORDER BY ID DESC

http://www.barnamenevis.org/forum/showthread.php?t=169007

علیرضا مداح
یک شنبه 01 شهریور 1388, 08:49 صبح
سلام دوست عزیز،
سطرهایی که در یک Table ذخیره شده اند، بر اساس نظریه ی مجموعه ها به صورت یک لیست مرتب نشده(Unordered) می باشد و ترتیب ذخیره سازی سطرها در جدول بر اساس Index های موجود در جدول ممکن است تغییر کند،
اگر قصد بازگرداندن آخرین سطر اضافه شده به جدول را دارید، می توانید از مقدار یکی از فیلدهای Incremental موجود در جدول استفاده نمایید، به طور مثال اگر در جدول خود یک فیلد Identity داشته باشید، می توانید با استفاده از کد زیر آخرین سطر درج شده را بدست بیاورید:

SELECT * FROM dbo.MyTable
WHERE $IDENTITY = IDENT_CURRENT('dbo.MyTable');

--OR

SELECT * FROM dbo.MyTable
WHERE MyTable.ID = IDENT_CURRENT('dbo.MyTable');
--MyTable.ID is an Identity column

در غیر اینصورت برای بازگرداندن آخرین رکورد از جدول باید ابتدا مقادیر را بر اساس یکی از فیلدهای جدول Sort کرده و آخرین رکورد را بدست بیاورید که می توانید این کار را توسط عبارت TOP همراه با ORDER BY انجام دهید، همچنین مطالعه ی توابع Ranking نیز توصیه می شود...،/

محمد سلیم آبادی
یک شنبه 01 شهریور 1388, 11:53 صبح
چند راه دیگر پیش پای شما می گذارم.
ابتدا برای اینکه سوء تفاهمی پیش نیاد من به جای کلمه Table از کلمه Result Set استفاده می کنم. ترتیب نمایش سطر ها در نتیجه یک دستور SELECT بطور پیش فرض بر اساس سعودی کلید اصلی یا کلاستر ایندس می باشد. تا وقتی که ما از ماده ی ORDER استفاده نکرده باشیم ترتیب معنایی ندارد (و وقتی که ترتیب معنا نداشته باشد پس اولین و آخرین سطر نیز معانیی ندارد!!!).

اول: یک ستون به نام "تاریخ درج" برای جدول در نظر بگیرید که به طور Default مقدار getdate داشته باشد. و سپس برای بدست آوردن آخرین سطر درج شده در جدول از کد زیر استفاده کنید.



SELECT *
FROM Your_table
WHERE InsertDate >= ALL (SELECT InsertDate FROM your_table)




SELECT * FROM
(
SELECT *,
ROW_ID+ROW_NUMBER() OVER(ORDER BY InsertDate DESC)
)AS D
WHERE ROW_ID=1

-- OR

SELECT TOP 1
(
SELECT *,
ROW_ID=ROW_NUMBER OVER(ORDER BY InsertDate DESC)
) AS D
ORDER BY ROW_ID ASC



و اگر جدولت ستونی از نوع Identity داشته باشد می توانید با استفاده از متغیر سیستمی @@identity یا تابع ها IDENT_CURRENT و SCOPE_IDENTITY آخرین شماره ای دی درج شده در جدول را بدست آورید ولی بهترین آنها استفاده از IDENT_CURRENT می باشد.



SELECT *
FROM Your_table
WHERE ID=@@identity


و با استفاده از Cursor هم می توانید تنها آخرین سطر result set را بدست بی آورید .



DECLARE MyCursor CURSOR
KEYSET
FOR SELECT * FROM Your_table

OPEN MyCursor
FETCH LAST FROM MyCursor
CLOSE MyCursor

mrmohsen
سه شنبه 03 شهریور 1388, 22:13 عصر
مرسی دوستان عزیز
مشکلم حل شد


SELECT TOP 1 * FROM [tableName] ORDER BY ID DESC

بهنام بهمنی
چهارشنبه 04 شهریور 1388, 10:45 صبح
به جواب آقاي مداح دقت کنيد , در صورتي که شما ایندکس کلاسترد رو فيلدي غير از id تعريف کرده باشد , راه حل زير جواب نمي دهد



SELECT TOP 1 * FROM [tableName] ORDER BY ID DESC

علیرضا مداح
چهارشنبه 04 شهریور 1388, 12:37 عصر
به جواب آقاي مداح دقت کنيد , در صورتي که شما ایندکس کلاسترد رو فيلدي غير از id تعريف کرده باشد , راه حل زير جواب نمي دهد

خیر دوست عزیز، در این کد فیلدی که باید نتایج بر اساس آن مرتب شود، به صورت صریح(Explicit) ذکر شده است، پس مرتب سازی بر اساس آن صورت می گیرد،/

reza4359
سه شنبه 27 مهر 1389, 15:38 عصر
اگه میشه بدون استفاده از مرتب سازی یک فیلد فراخوانی آخرین رکورد رو توضیح بدید چون من توی برنامم کلید اصلی ندارم و باید آخرین رکورد جدول رو بدست بیارم من این کارو با استفاده از شماره نامه انجام دادم ولی شماره نامه بر اساس سال تغییر میکنه و بازم رکورد های قبلی رو برای چاپ فراخوانی میکنه اگه میشه راهنمایی کنید.ممنون