PDA

View Full Version : گرفتن max یه ستون



mehrsa_fr
چهارشنبه 21 مهر 1389, 08:26 صبح
من میخوام تو select آخرین نفری که اضافه شده رو نشون بده ولی با این دستورم بهم ارور میده


select TLname,TName from Account where MAX(ID)

نمیدونم درست توضیح دادم یا نه

حمیدرضاصادقیان
چهارشنبه 21 مهر 1389, 08:29 صبح
سلام.شما اینجوری باید بنویسید.


select TLname,TName,max(id) from Account

موفق باشید

mehrsa_fr
چهارشنبه 21 مهر 1389, 08:36 صبح
به من یه همچین اروری میدهColumn 'TLname' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Reza_Yarahmadi
چهارشنبه 21 مهر 1389, 09:18 صبح
شما اول بايد Max رو بدست بياريد بعد ميتونيد توي دستور نمايش بديد

Declare @Max bigint
Select @Max = Max(ID) from Account
Select TLname, TName, @Max as MaxID from Account
اين دستور كنار تمام نام ها بزرگترين ID رو نمايش ميده.
ولي اگر ميخوايد به ازا هر نام بزرگترين ID اون نام رو داشته باشيد به صورت زير ميتونيد اين كار رو انجام بديد

Select TLname, TName, Max(ID) as MaxID from Account Group by TLname, TName

tooraj_azizi_1035
چهارشنبه 21 مهر 1389, 09:28 صبح
به من یه همچین اروری میدهColumn 'TLname' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.


سلام،

SELECT *
FROM TABLE2
WHERE ID = (SELECT Last(ID) FROM TABLE2);

کد بالا آخرین رکورد وارد شده رو بر می گردونه صرفنظر از اینکه ID بزرگترین هست یا نه اما کد پایین رکوردی رو که ID اون ماکزیمم هست رو بدون توجه به اینکه کدوم رکورد آخرین بار وارد شده بر می گردونه:

SELECT *
FROM TABLE2
WHERE ID = (SELECT Max(ID) FROM TABLE2);


:قلب: .Ideas are everything, Microsoft Corporation

tooraj_azizi_1035
چهارشنبه 21 مهر 1389, 09:35 صبح
با تشکر از پاسخ ها
ببینید من یه Autonumber دارم به نام Id که هر وقت فردی اضافه میشه id یه دونه میره بالا حالا من میخوام فقط آخرین نفری که اضافه شده نام و نام خانوادگیشو ببینم

سلام تو پست قبلی هر دو کد SQL برای شما جواب می ده چون هر رکوردی که به جدول شما اضافه می شه ID اون حتماً بزرگترین هست و اون رکورد حتماً آخرین رکورد وارد شده هست (چون AutoNumber گارانتی می کنه که آخرین رکورد Maximum ID رو داره). :قلب:

pezhvakco
چهارشنبه 21 مهر 1389, 09:45 صبح
این کد دستور هم بد نیست :

SELECT TOP 1 *
FROM Table1
ORDER BY ID DESC

Reza_Yarahmadi
چهارشنبه 21 مهر 1389, 09:58 صبح
قبل هر چيز معذرت ميخوام من اصلا سوال رو نخوندم و متن خطايي كه گفته بوديد رو نگاه كردم!!:گیج:

SELECT TOP 1 * FROM Table1 ORDER BY ID DESC
به هيچ وجه اين روش توصيه نميشه چون عمليات مرتب سازي سربار بسيار زيادي نسبت به يك جستجو داره.
روش دوستمون tooraj_azizi_1035 (http://barnamenevis.org/forum/member.php?u=41757) هم درسته كه كار ميكنه ولي چون به ازا هر ركورد يك محاسبه MAXداريم يه ذره سربار داره.:چشمک:
روش پيشنهادي من به اين صورت

Declare @Max bigint
Select @Max = Max(ID) from Account
Select * from Account ID = @MAX

tooraj_azizi_1035
چهارشنبه 21 مهر 1389, 10:14 صبح
قبل هر چيز معذرت ميخوام من اصلا سوال رو نخوندم و متن خطايي كه گفته بوديد رو نگاه كردم!!:گیج:

SELECT TOP 1 * FROM Table1 ORDER BY ID DESC
به هيچ وجه اين روش توصيه نميشه چون عمليات مرتب سازي سربار بسيار زيادي نسبت به يك جستجو داره.
روش دوستمون tooraj_azizi_1035 (http://barnamenevis.org/forum/member.php?u=41757) هم درسته كه كار ميكنه ولي چون به ازا هر ركورد يك محاسبه MAXداريم يه ذره سربار داره.:چشمک:
روش پيشنهادي من به اين صورت

Declare @Max bigint
Select @Max = Max(ID) from Account
Select * from Account ID = @MAX

سلام،
دوست عزیز فکر نمی کنم که موتور SQL Server وقتی رکوردهایی رو می خواد از یه جدول انتخاب کنه به ازاء هر رکورد محاسبات موجود در قسمت WHERE رو انجام بده چون این قسمت حتی می تونه قبل از خود SELECT پردازش بشه چون وابستگی به اون نداره در حالی که SELECT به مقدار موجود در WHERE وابستگی داره و موتور Query Optimizer اون دو رو نمی تونه به صورت Parallel اجرا کنه. در ضمن کد من دارای دو SELECT و کد شما هم دارای دو کد SELECT هست که با هم برابرند. امیدوارم واضح گفته باشم. :چشمک: