ايران ويج

نسخه‌ی کامل: مشکل در ایجاد یک Query
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
یه بانک اکسس هست که اگه زحمت بکشین بازش کنید ممنون میشم.
من برای هر فاکتور کد فروشنده و تاریخ رو دریافت کردم
در جدول اقلام فاکتور که با کد فاکتور به جدول قبلی متصل میشه، لیست کالاهای خریداری شده از اون فروشنده رو دارم.
از Join کردن جدول اقلام فاکتور با جدول فاکتور، چیزی مثل این عکس بدست میاد:
[تصویر:  Table_1.bmp]
این رکوردها همه مال یک فروشنده هستند اما تو تاریخ های مختلف هر کالایی رو با قیمتهای متفاوتی فروخته که در این مثال دو کالای 12 و 15 رو داریم.
من از هر نمونه کالا فقط جدیدترین قیمت رو میخوام
یعنی خروجی باید این باشه 005
[تصویر:  Table_2.bmp]
چون آخرین باری که کالای 12 فروش رفته در تاریخ 27-3-2010 به قیمت 55 ریال بوده
و جدیدترین تاریخی که کالای 15 فروش رفته 28-3-2010 به قیمت 20 ریال بوده.
چطور یک خروجی مثل عکس دوم بگیرمQuestion
موندم توش... 036

اینجور مواقع کاری که غیرمنطقی باشه مطلقاً ممنوعه
ولی ظاهراً درخواست من با منطق منطبقه
از DISTINCT و MAX استفاده کن!!
کاری که میخواهی به این راحتی نمیشه
این یه نمونه هست ولی فقط وقتی درست جواب میده که 2 تاریخ یک شکل وجود نداشته باشه و (فیلد تاریخ از نوع int باشه)

کد:
select cod,date,fi from product
where
date in(select max(date) from product group by cod)
نقل قول: کاری که میخواهی به این راحتی نمیشه
جاذبه اش به همینه که جدول من فقط سه فیلد داره و با اینکه چیز پیچیده ای نیست اما تا به حال به Query مورد نظر دست نیافته ام.

نقل قول: فقط وقتی درست جواب میده که 2 تاریخ یک شکل وجود نداشته باشه
متأسفانه امکانش هست که برای چند کالای متفاوت تاریخ های یکسان موجود باشه چون در یک روز خیلی کالاها فروش میرن.

نقل قول: از DISTINCT و MAX استفاده کن!!
چگونه؟

شیطونه میگه یه حلقه تکرار به تعداد رکوردها تو خود VB بنویسم ولی هدف یادگیری SQL بود نه فقط گرفتن خروجی.
این هم یک کلک رشتی دیگه که اگه منطقی باشه و تأییدش کنید حتماً ازش استفاده می کنم:
Query1 = q1

کد:
SELECT Max(tblBuyFactor.fDate) AS fDate, tblBuyFactorItems.fProductID
FROM tblBuyFactor INNER JOIN tblBuyFactorItems ON tblBuyFactor.fBuyFactorID = tblBuyFactorItems.fBuyFactorID
WHERE (tblBuyFactor.fProviderID=[])
GROUP BY fProductID;


Query2= q2

کد:
SELECT (tblBuyFactor.fDate), tblBuyFactorItems.fProductID, (tblBuyFactorItems.fSinglePrice)
FROM tblBuyFactor INNER JOIN tblBuyFactorItems ON tblBuyFactor.fBuyFactorID = tblBuyFactorItems.fBuyFactorID
WHERE (tblBuyFactor.fProviderID=[]);


Final Query

کد:
SELECT *
FROM q2
WHERE (fProductID & '=' & fDate) In
(
SELECT (fProductID & '=' & fDate) From q1
);

نظر مثبتتون چیه دوستان؟
البته هنوز منتظر پاسخ آقا فریدون هستم چون خودم بلد نیستم با Distinct کار کنم.

کاش این کلک آخر جواب نمیداد!
الان باید کلی فکر و محاسبه کرد که آیا Final Query همیشه درست عمل میکنه یا نه؟