PDA

View Full Version : سوال: بدست آوردن آخرین سطر جدولی که Identity نداره



Open-Source
پنج شنبه 13 اسفند 1388, 10:47 صبح
سلام.
:افسرده:
من یه جدول دارم که کلیدش از نوع varchar هستش و بصورت دستی وارد میشود .
حال چطوری میتونم آخرین رکورد این جدول رو پیدار کنم؟
آخه نمیشه Sort کرد.
تورو خدا کمک.:گریه:

ali_ahr7
جمعه 14 اسفند 1388, 12:09 عصر
سلام.
آيا كليد ها به ترتيب خاصي توسط كاربر وارد ميشن؟
اگه بله كه ميتوني توسط تابع max اخرين ركورد رو پيدا كني و اگر خير بايد يه ستون به بانكت اضاف كني تا بطور اتوماتيك تاريخ ، ساعت و ثانيه رو ثبت كنه و بعدا توسط يه كوئري ساده بازيابيش كني.

batorsia
دوشنبه 24 اسفند 1388, 08:46 صبح
با سلاماز RowCount تعداد کل رکوردها را استخراج کنید و با مساوی قراردادن RowNumber با این عدد، به آخرین رکورد دستیابی پیدا کنید.

محمد سلیم آبادی
دوشنبه 24 اسفند 1388, 09:40 صبح
با سلاماز RowCount تعداد کل رکوردها را استخراج کنید و با مساوی قراردادن RowNumber با این عدد، به آخرین رکورد دستیابی پیدا کنید.
سلام،
اگر پست شماره 1 رو کامل بخوانین کاربر هیچ ستونی نداره که توسط آن به آخرین سطر دست پیدا کنه مثل IDENTITY.

در اینگونه موارد می تونیم از ماده ی OUTPUT در عبارت INSERT استفاده کنیم. یا از AFTER TRIGGER روی جدول برای insert بهره ببریم.

batorsia
سه شنبه 10 فروردین 1389, 08:44 صبح
Declare @TempTable Table
(
FirstItem VarChar(50), --FirstItem = YourKeyField
RowNumberItem Int --RowNumberItem = Number Of Row Data In Your Table
)
Insert Into @TempTable
Select YourKeyField,ROW_NUMBER() Over (Order By YourKeyField) From YourTable
Select FirstItem From @TempTable Where RowNumberItem = (Select COUNT(*) From MyTable)

محمد سلیم آبادی
پنج شنبه 12 فروردین 1389, 00:21 صبح
Declare @TempTable Table
(
FirstItem VarChar(50), --FirstItem = YourKeyField
RowNumberItem Int --RowNumberItem = Number Of Row Data In Your Table
)
Insert Into @TempTable
Select YourKeyField,ROW_NUMBER() Over (Order By YourKeyField) From YourTable
Select FirstItem From @TempTable Where RowNumberItem = (Select COUNT(*) From MyTable)


سلام،
اگر پست اول را کامل خوانده باشین بایستی متوجه شده باشین که کلید اصلی جدول به صورت صعودی نیست. به هیچ ترتیب مشخصی درج نشده، Sequential نیست.

از طرفی Query که نوشتین تا دو سطح از نظر منطقی می تواند ساده سازی شود:
سطح اول:


SELECT FirstItem
FROM (SELECT YourField, ROW_NUMBER() OVER(ORDER BY YourKeyField DESC)
FROM YourTable) D(YourField, Row_ID)
WHERE Row_ID = 1;

سطح دوم:


SELECT FirstItem
FROM YourTable
WHERE YourKeyField = (SELECT MAX(YourKeyField)
FROM YourTable);