PDA

View Full Version : سوال: کوئری که آخرین قمت خرید هر بارکد را نمایش دهد



kamran_14
دوشنبه 25 خرداد 1394, 22:30 عصر
سلام
خسته نباشید در این فایل عکس من 2 تا جدول درست کردم که یکی جدول مربوط به فاکتور خرید و جدول دیگر مربوط به اقلام فاکتور خرید است
من می خوام کوئری بنویسم که آخرین قیمت خرید هر بارکد را نشان دهد.
این کد را نوشتم ولی کامل نیست. می شه کمکم کنید؟ تا این کد را به صورت اصولی و کامل بنویسم

select t.barcode,MAX(t.tarikh) as tarikh,t.gemateForush
from (select distinct tblAglamefactoreKharid.barcode,
(tblAglamefactoreKharid.gematekharid*0.15) + tblAglameFactoreKharid.gematekharid as gemateForush,
tblfactoreKharid.tarikh as tarikh
from tblAglameFactoreKharid
join tblfactoreKharid
on tblAglameFactoreKharid.factoreKharidID=tblfactoreK harid.factoreKharidID) as t
group by t.barcode,t.gemateForush;

ممنون

kamran_14
سه شنبه 26 خرداد 1394, 23:00 عصر
در واقع من می خوام برای جدولی که هنگام inner join ایجاد شده شرط بذارم
سوال من اینه که جدولی که ایجاد شده چطوری باز میتونم فیلترش کنم یعنی برای جدول جدید شرط بذارم؟

strongxxx
چهارشنبه 27 خرداد 1394, 10:46 صبح
ببین این لینکها به دردت می خوره
لینک 1 (http://stackoverflow.com/questions/3442931/sql-server-select-distinct-rows-using-most-recent-value-only)
لینک 2 (http://stackoverflow.com/questions/4090789/sql-how-to-select-the-most-recent-date-item)

kamran_14
سه شنبه 02 تیر 1394, 05:15 صبح
من این کد را نوشتم و درست جواب داد

--1
-- select * into Tbl_Temp from Tbl1 inner join Tbl2 on Tbl1.ID=Tbl2.ID
select akharintarikh.barcode,akharintarikh.maxTarik,p.gem ateForush
from(select t.barcode ,MAX(t.tarikh) as maxTarik
from (select tblAglamefactoreKharid.barcode,
tblfactoreKharid.tarikh
from tblAglameFactoreKharid
join tblfactoreKharid
on tblAglameFactoreKharid.factoreKharidID=tblfactoreK harid.factoreKharidID) as t
group by t.barcode) as akharintarikh

inner join (select tblAglamefactoreKharid.barcode,
(tblAglameFactoreKharid.gematekharid*0.15+tblAglam efactoreKharid.gemateKharid) as gemateForush,
tblfactoreKharid.tarikh
from tblAglameFactoreKharid
join tblfactoreKharid
on tblAglameFactoreKharid.factoreKharidID=tblfactoreK harid.factoreKharidID ) as p
on p.barcode=akharintarikh.barcode and p.tarikh =akharintarikh.maxTarik
ولی قسمت هایی که با رنگ قرمز مشخص شده تکراریه من از اسم مستعاری که در اولی دادم (یعنی t) داخل inner join استفاده کردم ولی داخل inner joiin این اسم مستعار رو نشناخت و مجبور شدم از اول بنویسم برای جلوگیری از تکرار جدول چه راهی پیشنهاد می‌کنید؟

nazanin_asadi_1
سه شنبه 02 تیر 1394, 10:28 صبح
چیزی از کدهاتون متوجه نشدم
ولی اینجوری که فهمیدم رو توضیح میدم (با توجه به تابع MAX که نوشتین )

شما یه سری کالا دارین که حالا هر بار که خرید میکنید قیمت جدید برای همون بارکد ثبت میکنید

حالا میخواین آخرین قیمت های خرید رو برای بارکدهاتون داشته باشین

دو راه که من بیشتر ازشون استفاده میکنم
1- همیشه آخرین قیمت خرید رو آیدیشو توی بارکد آبدیت میکنم
2- به صورت نزولی مرتب میکنم و گروه بندی میزنم بهش اینجوری آخرین رکورد جوین میشه

میتونید از این دو راه استفاده کنید (البته اگه منظورتون رو درست متوجه شده باشم )

kamran_14
سه شنبه 02 تیر 1394, 19:25 عصر
میتونید از این دو راه استفاده کنید (البته اگه منظورتون رو درست متوجه شده باشم )
ممنون از جوابتون
برای اینکه خوب بتونم منظورمو بیان کنم از شما می خوام که این کوئری را کامل کنید
کوئری بنویسید که بالاترین معدل هر رشته را حساب کند و نام آن دانشجو را هم چاپ کند

select reshteh,MAX(AVGkol)
from tblstudent
group by reshteh
ولی من نمی تونم نام آن شخص را هم چاپ کنم
ممنون میشم اگه این کوئری را کامل کنید