PDA

View Full Version : متوسط هر یک دقیقه



MEGANMEGAN
چهارشنبه 25 بهمن 1391, 19:39 عصر
با سلام در یک جدول که دو ستون تایم و مقدار دارد و به ازای هر ثانیه یک مقدار وجود دارد سوالم این است:چطور می توانم میانگین مقادیر هر یک دقیقه از مقادیر را بدست بیاورم مثلا برای یک شبانه روز 1440 مقدار باید بدست بیاورم؟

محمد سلیم آبادی
چهارشنبه 25 بهمن 1391, 19:42 عصر
میتوانید یک مثال بزنین و بر اساس اون خروجی مورد نظر رو توضیح بدین؟

mehdi.mousavi
پنج شنبه 26 بهمن 1391, 08:08 صبح
با سلام در یک جدول که دو ستون تایم و مقدار دارد و به ازای هر ثانیه یک مقدار وجود دارد سوالم این است:چطور می توانم میانگین مقادیر هر یک دقیقه از مقادیر را بدست بیاورم مثلا برای یک شبانه روز 1440 مقدار باید بدست بیاورم؟

سلام.
اگر فرض کنم که جدول شما حاوی دو ستون باشه و مقادیر زیر در اون قرار داشته باشه:

DECLARE @MyTable AS TABLE (
MyTime TIME,
MyVal DECIMAL(19, 5)
);

INSERT INTO @MyTable VALUES
('00:00:00', 1),
('00:00:01', 5),
('00:00:02', 7),
('00:00:59', 10),

('00:01:00', 10),
('00:01:18', 20),
('00:01:59', 10),

('23:01:59', 18)


در اونصورت کافیه تا بدین شکل عمل کنید:

SELECT
AVG(MyVal)
FROM
@MyTable
GROUP BY
DATEPART(HOUR, MyTime),
DATEPART(MINUTE, MyTime),
(DATEPART(SECOND, MyTime) / 60)

نتیجه Query ی فوق، Result Set زیر هستش:

5.750000
13.333333
18.000000

یعنی میانگین MyVal در بازه های یک دقیقه ای (با فرض اینکه اطلاعات یک شبانه روز در جدول وجود داشته باشه، در غیر اینصورت، باید Date رو هم به حساب بیارید).

موفق باشید.

محمد سلیم آبادی
پنج شنبه 26 بهمن 1391, 10:20 صبح
با سلام در یک جدول که دو ستون تایم و مقدار دارد و به ازای هر ثانیه یک مقدار وجود دارد سوالم این است:چطور می توانم میانگین مقادیر هر یک دقیقه از مقادیر را بدست بیاورم مثلا برای یک شبانه روز 1440 مقدار باید بدست بیاورم؟
منظور این است که سطرهای جدول 60 تا 60 دسته بندی بشن و بعد از آن، میانگین مقادیر هر گروه بدست بیاید.
کافیه توسط این تکنیک (http://www.dotnettips.info/post/1186/%D8%AF%D8%B3%D8%AA%D9%87-%D8%A8%D9%86%D8%AF%DB%8C-%D8%B3%D8%B7%D8%B1-%D9%87%D8%A7%DB%8C-%D8%AC%D8%AF%D9%88%D9%84) سطرهای جدول را 60 تا 60 سوا کنید سپس بر اساس شماره دسته، گروه بندی انجام داده و توسط تابع avg میانگین را بدست بیاورید. چیزی شبیه به این:
SELECT AVG(value) FROM RankingTable GROUP BY grp_nbr

محمد سلیم آبادی
پنج شنبه 26 بهمن 1391, 10:35 صبح
در اونصورت کافیه تا بدین شکل عمل کنید:

SELECT
AVG(MyVal)
FROM
@MyTable
GROUP BY
DATEPART(HOUR, MyTime),
DATEPART(MINUTE, MyTime),
(DATEPART(SECOND, MyTime) / 60)

سلام
به نظر من مقدار سوم در ماده ی group by اضافه است. یعنی با حذف قسمت اضافی خواهیم داشت:
SELECT
AVG(MyVal)
FROM
@MyTable
GROUP BY
DATEPART(HOUR, MyTime),
DATEPART(MINUTE, MyTime);

mehdi.mousavi
جمعه 27 بهمن 1391, 07:00 صبح
سلام به نظر من مقدار سوم در ماده ی group by اضافه است.

سلام.
بله، حق با شماست. اگر میخواستیم فرضا به بازه های 50 ثانیه ای تقسیم کنیم،
اونوقت اون بخش از GROUP BY کاربرد پیدا می کرد (البته با فرض تغییر 60 به 50).

ممنون و موفق باشید.