PDA

View Full Version : بدست آوردن آخرین قیمت محصولات



araz_pashazadeh
یک شنبه 16 فروردین 1394, 19:27 عصر
با عرض سلام و خسته نباشید
بنده برا ی نگه داری قیمت محصولات در پایگاه داده دو تا جدول دارم(جدول محولات و قیمت محصولات) کاربر برای هر محصول می تواند جدین قیمت را ثبت کند.
چگونه می توان آخرین قیمت ثبت شده برای هر محصول را بدست آورد؟
لطفا دوستان راهنمایی کنن.

tiphooo
دوشنبه 17 فروردین 1394, 01:48 صبح
اگر برای ثبت فاکتور میخواهید این کار را بکنید آخرین قیمت درج شده روش صحیحی نمی باشد چون بعضا پیش می اید که فاکتور یک ماه قبل را در ماه جاری میخواهند ثبت کنند و باید با قیمت همان ماه محاسبه شود
برای این کار باید در جدول قیمتتان یک فیلد برای کد محصول و یک فیلد تاریخ ثبت قیمت و یک فیلد مبلغ وجود داشته باشد و برای به دست اوردن قیمت در فاکتور باید بعد از انتخاب کالا شما اخرین تاریخ ثبت شده که کوچکتر از تاریخ فاکتور باشد را برای آن کالا در جدول قیمتها پیدا کرده و ثبت کنید

soheileee
دوشنبه 24 فروردین 1394, 03:26 صبح
اگر فرض رو بر این بگیریم که تمام سناریوی شما درست طراحی شده و اینکه می خواید آخرین قیمت محصول رو بدست بیارید، پاسخش خیلی ساده است.
شما می تونید با استفاده از row_number قیمت محصولات رو بر اساس تاریخ دسته بندی کنید. به این تکنیک می گن Windowing.
یعنی چی؟

خوب فرض کنیم Tableهای شما اینطوره:

Products: ProductID, ProductName, ProductCategory
Price: ProductID, Price, PricingDate

جداول Product و Price با ProductID به هم وصل شدن یه ارتباط یک به چند رو تشکیل دادن.

حالا اینجوری می تونی آخرین قیمت محصول رو پیدا کنی:




WITH LatestPrice AS
(
SELECT ROW_NUMBER() OVER(PARTITION BY PR.[ProductName] ORDER BY PRI.[PriceDate] DESC) AS DATE_SEQUENCE
, PR.[ProductName]
, PRI.[Price]
, PRI.[PriceDate]
FROM [dbo].[Products] PR
INNER JOIN [dbo].[Price] PRI ON PR.[ProductID]=PRI.[ProductID]
)
SELECT [ProductName]
, [Price]
, [PriceDate]
FROM LatestPrice
WHERE DATE_SEQUENCE = 1