استخراج اطلاعات به صورت گروه بندی شده
با سلام
من یک جدول دارم که توش اطلاعات ثبت میشه و هر کدوم هم timestamp دارن
کاری که میخوام بکنم اینه که اطلاعات رو به صورت بازه ای استخراج کنم
منظورم از اطلاعات فقط تعداد رکوردها تو یک بازه زمانی هستش
هدف اصلیم گرفتن گزارشه
برای مثال میخوام ببینم تو یک ماه اخیر هر روز چند رکورد ثبت شده
یا مثلا 24 ساعته گذشته، هر ساعت چند رکورد ثبت شده
یا مثلا اگر تو بازه یک سال اخیر هر ماه، یا هفته ، یا روز چه تعداد داده ثبت شده
فرایند اینکه چطوری بیام و اطلاعات رو بگیرم رو نمیدونم
در نهایت میخوام مثلا یه چارت باهاش رسم کنم
نمونه مورد نظر:
ماه | رکورد
01 20
02 15
03 43
04 12
نمونه 2:
ساعت | رکورد
00 2
01 1
02 0
03 0
04 0
05 0
06 2
07 5
08 10
....
ممنون میشم اگر دوستان کمک کنن
نقل قول: استخراج اطلاعات به صورت گروه بندی شده
نقل قول: استخراج اطلاعات به صورت گروه بندی شده
با سلام.
در صورتی که شما می خواهید شرطی به صورت بازه زمانی اعمال کنید می توانید از کلمه کلیدی between استفاده کنید. و برای بدست آوردن تعداد می توانید از تابع Count استفاده کنید.
به دو مثال زیر توجه کنید:
۱- تعداد در یک بازه
SELECT COUNT(*)
FROM TableName
WHERE DATE BETWEEN 'تاریخ' AND 'تاریخ'
۲- تعداد در ۲۴ ساعت گذشته:
SELECT COUNT(*)
FROM TableName
WHERE DATE BETWEEN 'ساعت شروع+تاریخ' AND 'تاریخ + ساعت پایان'
این مثال ها فقط برای بهتر شدن دید شما بود، بنابراین شما با استفاده از between و count خیلی راحت خواهید توانست داده های مورد نظرتون را استخراج کنید.
نکته : در صورتی که برای رسم چارت داده می خواهید یا باید از Group by برای بدست آوردن استفاده کنید یا اینکه چندین بار کوری اجرا کنید، تا داده های مورد نظرتان را استخراج کنید( مانند مثال های خودتان).
انشالا به جواب مورد نظرتون برسید. موفق باشید./
نقل قول: استخراج اطلاعات به صورت گروه بندی شده
ممنون دوست عزیز
اینا رو که میدونم
مشکلم با اختلاف بین ساعت و روز و ایناس
برای مثال شما از تاریخ 92/02/01 تا 92/11/30 واسه به صورت ماهانه کوئری تعداد رکورد رو بگیر
با این توضیح که 6ماه اول ما 31 روزه و بقیه 30 روز و اینکه من نمیخوام صد تا کوئری بفرستم واسه بانک و ترجیحا با دستور group میخوام این کار انجام بشه
واسه گزارش روزانه و هفتگی تونستم با ساخت جدول مجازی و دستور union این کارو بکنم ولی واسه ماه با توجه به اختلاف بین تعداد روزهای ما و میلادی راحی به نظرم نرسیده فعلا
1 ضمیمه
نقل قول: استخراج اطلاعات به صورت گروه بندی شده
کوری زیر را ببینید:
select DATEPART(Year, DateColumn) as Year,DATEPART(month, DateColumn) as Month , count(Progress) as Total
from dbo.TableName
group by DATEPART(YEAR, DateColumn) , DATEPART(month, DateColumn)
order by DATEPART(YEAR, DateColumn) , DATEPART(month, DateColumn);
خروجی اجرای کوری:
ضمیمه 116440
مشکل اینه که این برای فقط ماهای میلادی مناسب است.:متفکر:
یک راه ساده ولی غیر منطقی اینه که توی یک پروسیجر ۱۲ بار select بزنید و اونها را اجتماع کنید! :گیج:
نقل قول: استخراج اطلاعات به صورت گروه بندی شده
بله تمام مشکلات ما به خاطر همین اختلاف ماه ها و سالهامونه
به قول شما اون که غیرمنطقیه ضمن اینکه علاوه بر زمانی که بابت صرف وقت برای دریافت نتایج میشه یه زمانی هم باید بزاریم واسه اینکه انتهای بازه رو بدست بیاریم که اونم به خاطر تفاوت تعداد روزهای ماه رو بانک بزرگ کاربر رو کلافه میکنه
نقل قول: استخراج اطلاعات به صورت گروه بندی شده
بهتره که فیلد تاریخ رو به صورت DATETIME و یا DATE ذخیره کنید و تاریخ ها هم میلادی باشه . بعد در هنگام نمایش به تاریخ شمسی تبدیل کنید .
اگر از تاریه میلادی استفاده کنید از توابع مقایسه مقادیر بهتر می تونید استفاده کنید .
نقل قول: استخراج اطلاعات به صورت گروه بندی شده
نقل قول:
نوشته شده توسط
toopak
ممنون دوست عزیز
اینا رو که میدونم
مشکلم با اختلاف بین ساعت و روز و ایناس
برای مثال شما از تاریخ 92/02/01 تا 92/11/30 واسه به صورت ماهانه کوئری تعداد رکورد رو بگیر
با این توضیح که 6ماه اول ما 31 روزه و بقیه 30 روز و اینکه من نمیخوام صد تا کوئری بفرستم واسه بانک و ترجیحا با دستور group میخوام این کار انجام بشه
واسه گزارش روزانه و هفتگی تونستم با ساخت جدول مجازی و دستور union این کارو بکنم ولی واسه ماه با توجه به اختلاف بین تعداد روزهای ما و میلادی راحی به نظرم نرسیده فعلا
ابتدا تاریخ شمسی رو به میلادی تبدیل کن بعد با فیلد تاریخ درون دیتابیس مقایسه کن .