View Full Version : واکشی اطلاعات از یک جدول با شرط MAx
SardareEshgh
دوشنبه 23 مهر 1397, 11:23 صبح
دوستان سلام.
یک جدولی دارم که بر اساس سه ستون آن میخوام اطلاعات رو واکشی کنم.
اسم جدول :TblRejimDayes
ستونهای Date , Vadeh,BakhshId
ستون Vadeh سه نوع مقدار 1و2و3 میگیره.
میخوام داده های مربوط به یک بخش (BakhshId)و در آخرین تاریخ (Date)و در آخرین وعده غذایی(Vadeh) رو بخونم.با دستور زیر جواب درست نمیده.
cmd.CommandText = "Select * FROM TblRejimDayes wHERE( Vadeh= (SELECT MAX(Vadeh) FROM TblRejimDayes WHERE Date = (SELECT MAX(Date) FROM TblRejimDayes WHERE ( BakhshId=@BakhshId) ))) ";
ممنون
رامین مرادی
دوشنبه 23 مهر 1397, 12:15 عصر
سلام اینو تست کنید ببینید جواب میده
خیلی ضایع نوشتم فقط:لبخند:
;with cte1 as( select Date , Vadeh,BakhshId from TblRejimDayes where BakhshId=12)
,cte2 as(select *,ROW_NUMBER() OVER (PARTITION BY BakhshId ORDER BY Date Desc ) AS rn from cte1)
,cte3 as (select * from cte2 where cte2.rn=1)
,cte4 as (select *,ROW_NUMBER() OVER (PARTITION BY BakhshId ORDER BY Vadeh Desc ) AS rn from cte3)
select * from cte4 where cte4.rn=1
SardareEshgh
دوشنبه 23 مهر 1397, 12:24 عصر
سلام اینو تست کنید ببینید جواب میده
خیلی ضایع نوشتم فقط:لبخند:
;with cte1 as( select Date , Vadeh,BakhshId from TblRejimDayes where BakhshId=12)
,cte2 as(select *,ROW_NUMBER() OVER (PARTITION BY BakhshId ORDER BY Date Desc ) AS rn from cte1)
,cte3 as (select * from cte2 where cte2.rn=1)
,cte4 as (select *,ROW_NUMBER() OVER (PARTITION BY BakhshId ORDER BY Vadeh Desc ) AS rn from cte3)
select * from cte4 where cte4.rn=1
ممنون از توجهتون.
به اینصورت اصلاح کردم ولی بازهم خطا میده. راستش اینجور کد تاحالا ندیدم . اصلا متوجه مفهومش نمیشم!!
cmd.CommandText = " cte1 as(select Date, Vadeh, BakhshId from TblRejimDayes where BakhshId= @BakhshId) with , " +
"cte2 as(select *,ROW_NUMBER() OVER(PARTITION BY BakhshId ORDER BY Date Desc) AS rn from cte1), cte3 as (select * from cte2 where cte2.rn = 1),"+
"cte4 as (select *,ROW_NUMBER() OVER(PARTITION BY BakhshId ORDER BY Vadeh Desc) AS rn from cte3), select* from cte4 where cte4.rn = 1";
رامین مرادی
دوشنبه 23 مهر 1397, 12:27 عصر
بی زحمت دیتابیستون رو بدید من کدشو بزنم بدم بهتون. بدون اطلاعات جدول سخته
SardareEshgh
دوشنبه 23 مهر 1397, 12:35 عصر
بی زحمت دیتابیستون رو بدید من کدشو بزنم بدم بهتون. بدون اطلاعات جدول سخته
داده زیادی ندارم . تصویرش رو میذارم .149080
نمیدونم اینجوری به کارتون میاد یا نه.
SardareEshgh
دوشنبه 23 مهر 1397, 12:44 عصر
دستور رو به اینصورت مینویسم جواب میده فقط ستون Vadeh رو نمیتونم وارد دستور کنم:
cmd.CommandText = "Select * FROM TblRejimDayes wHERE( Date = (SELECT MAX(Date) FROM TblRejimDayes WHERE (BakhshId=@BakhshId) ))
رامین مرادی
دوشنبه 23 مهر 1397, 12:48 عصر
نه متاسفانه حداقل اکسل بدید
SardareEshgh
دوشنبه 23 مهر 1397, 13:16 عصر
نه متاسفانه حداقل اکسل بدید
نمیدونم چرا موقع خروجی اکسل خطا میده. اسکریپتش رو خواستم بذارم قسمت آپلود این سایت خطا میده! . ورژن sql بنده 10.50.4000.0 هستش. اگه به ورژن Sql شما میخوره بکاپ رو بذارم.
SardareEshgh
دوشنبه 23 مهر 1397, 13:22 عصر
بفرما اسکریپت و کل دیتابیس رو آپلود کردم
149082
SardareEshgh
دوشنبه 23 مهر 1397, 13:37 عصر
جالبه. دستور رو که به صورت زیر مینویسم دادهایی رو که نباید نشون بده نشون میده و داده هایی رو که باید نشون بده نشون نمیده. کاملا برعکس عمل میکنه!!:
cmd.CommandText = "Select * FROM TblRejimDayes wHERE Vadeh = (SELECT MAX(Vadeh) FROM TblRejimDayes where Date = (SELECT MAX(Date) FROM TblRejimDayes WHERE (BakhshId=@BakhshId) )) ";
SardareEshgh
سه شنبه 24 مهر 1397, 18:38 عصر
بالاخره با این دستور جواب داد :
cmd.CommandText = "Select * from TblRejimDayes where (BakhshId = @BakhshId And Date= (SELECT MAX(Date) FROM TblRejimDayes ) And Vadeh= (SELECT MAX(Vadeh) FROM TblRejimDayes ) ) ";
SardareEshgh
سه شنبه 24 مهر 1397, 19:16 عصر
بالاخره با این دستور جواب داد :
cmd.CommandText = "Select * from TblRejimDayes where (BakhshId = @BakhshId And Date= (SELECT MAX(Date) FROM TblRejimDayes ) And Vadeh= (SELECT MAX(Vadeh) FROM TblRejimDayes ) ) ";
باز هم اشتباه بود !!:متفکر::متفکر::متفکر:
SardareEshgh
چهارشنبه 25 مهر 1397, 18:18 عصر
خدا رو شکر بالاخره یافتم . اما چه کدی شد !!! :
cmd.CommandText = "select * from TblRejimDayes where BakhshId=@BakhshId And Date = (SELECT MAX(Date) FROM TblRejimDayes where BakhshId=@BakhshId) " +
"And Vadeh =(SELECT MAX(Vadeh) FROM TblRejimDayes where BakhshId=@BakhshId And Date = (SELECT MAX(Date) FROM TblRejimDayes where BakhshId=@BakhshId))";
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.