کسی میتونه راحع به در آوردن این query بهم کمک کنه ؟ ناجور لازم دارم
Ask.jpg
کسی میتونه راحع به در آوردن این query بهم کمک کنه ؟ ناجور لازم دارم
Ask.jpg
SELECT Week ,StartDate,EndDate
,(SELECT AVG(VALUE) FROM Activety WHERE AcDate>=StartDate AND AcDate<=EndDate AND ItemID=1)
FROM ItemAge
WHERE ItemID=1
1 2012-01-10 2012-01-16 6.71428571428571
2 2012-01-17 2012-01-23 4.85714285714286
3 2012-01-24 2012-01-30 3.8
این واسه یه ایتم هست حالا اگه واسه دو ایتم رو باهم بخواهیم دربیاریم!؟؟؟!؟
نتیجه ای که میخواهید را دقیق مشخص کنید. در تصویر نتیجه مشخص نشده. همچنین توضیح بدین نتیجه بر چه اساسی بدست می آید.
اول از همه جدول Activity و ItemAgeWeek رو باهم Join می کنید. من از RIGHT OUTER JOIN به این علت استفاده کردم که تمام هفته هایی که در جدول ItemAgeWeek برای آیتم ها در نظر گرفتی رو بیاره. مثلا برای آیتم شماره دو در هفته سوم مقداری نداری و چون مقدارش null هست صفر میشه.
شرط Join کردن شما دو مورد میشه :
1. تساوی ItemID های دو جدول
2. AcDate، مابین فیلد تاریخ شروع و پایان جدول ItemAgeWeek باشه
SELECT w.ItemID,
w.[Week],
AVG(CAST(ISNULL(ac.value, 0) AS DECIMAL)) AS Average
FROM Activity AS ac
RIGHT OUTER JOIN ItemAgeWeek AS w
ON ac.ItemID = w.ItemID
AND ac.AcDate BETWEEN w.startDate AND w.EndDate
GROUP BY
w.[Week],
w.ItemID
ORDER BY
w.ItemID
که خروجیش میشه این :
Activity.jpg
موفق باشید!
من مطمئن نیستم که کاربر چه نتیجه ای مدنظرش هست چرا که یکسری چیزها با هم در تناقض هستن. مثلا در تصویر فقط دو ستون آمده week و average ولی در query که پست کردن نام سه ستون آمده به غیر از week دو ستون startdate و enddate. و معلوم نشده است که به ازای هر هفته فقط یک مقدار می خواهند یا نه (توجه کنید که در جدول week سه هفته وجود دارد)
اگر بخواهیم به query که پست شده اتکا کنیم می توان با اندکی اصلاح به نتیجه مطلوب رسید:
SELECT Week ,StartDate,EndDate
,(SELECT AVG(VALUE) FROM Activety WHERE AcDate>=StartDate AND AcDate<=EndDate AND ItemID=I.ItemID)
FROM ItemAge I
WHERE ItemID IN(1, 2);
اما من این روش را پیشنهاد نمی کنم. روش Join مطلوب تر است.