View Full Version : سوال: ترکیب چند رکورد
khazaie01
پنج شنبه 10 اردیبهشت 1388, 16:24 عصر
سلام دوستان یک جدول دارم که کار کرد دستگاه X را نشان میده و در هر روز 3 تا(هر شیفت یکی) رکورد جدید وارد میشه . میخوام موقع رسم نمودار تمام رکوردها نمایش داده نشه مثلا هر 1 روز 1 روز یا هر یک ماه 1 ماه نمایش داده بشه . یعنی در 1 رکورد جمع کارکرد 1 ماه دستگاه باشه باید چکار کنم ؟ باید از رکورد اول شروع کنم و مثلا رکوردهای که تاریخ شان مال 10 روز بعد از اون رکورد است را با هم جمع کنم و داخل یک جدول قرار بدم و ... ؟؟؟ اگه آره چجوری یک تاریخ شمسی را با 10 روز یا 1 ماه جمع کنم ؟
bmanfy
پنج شنبه 10 اردیبهشت 1388, 18:06 عصر
اینجور که من متوجه شدم . ظاهرا شما میخوای مثلا سه تا رکرود یک روز رو بیاد و در یک رکورد نشون بده . و در واقع مقادیرشون رو جمع کنه .
به نظر میرسه که میتونی با استفاده از GroupBy این کار رو انجام بدی .
khazaie01
پنج شنبه 10 اردیبهشت 1388, 21:10 عصر
ممنون بله دقیقا هم سه رکورد یک روز و هم مثلا رکوردهای هر 10 روز ... میشه بیشتر توضیح بدین ؟ با GroupBy میشه مثلا 10 روز 10 روز جدا کرد ؟
khazaie01
جمعه 11 اردیبهشت 1388, 07:09 صبح
من یکم با Oreder BY ور رفتم ولی نمیشه با این میشه فقط سه شیفت را یکی کرد ....
دوستان کمککککککککککککککککککککککک
bmanfy
جمعه 11 اردیبهشت 1388, 17:54 عصر
کافیه بر حسب تاریخ گروهبندی کنی . اونوقت رکوردهای یک روز رو جمع میکنه . و چون شما هدفتون هم جمع زدن هست میتونید از توابع تجمعی مثل Sum استفاده کنید .
Select ..........
From TblName
Group By DateFieldName
[Having]
[Where]
bmanfy
جمعه 11 اردیبهشت 1388, 17:56 عصر
من یکم با Oreder BY ور رفتم ولی نمیشه با این میشه فقط سه شیفت را یکی کرد ....
Order By ربطی به گروه بندی نداره . Order By برای مرتب سازی استفاده میشه .
موفق باشید .
khazaie01
شنبه 12 اردیبهشت 1388, 17:19 عصر
ببخشید بعد از 5 ساعت فکر کردن دیگه حواسی نمیمونه منظورم همون GroupBy ...
دوست عزیز ممنون ولی این دستور بازم فقط رکوردهای یک روز را جمع میکنه ...
من یه چیزی مثل همین میخوام با این تفاوت که میخوام رکوردها را 10 روز 10 روز جمع کنه . GroupBy رکوردهایی را که تاریخ یکسان دارن را به یک گروه تبدیل میکنه ...
shervin farzin
یک شنبه 13 اردیبهشت 1388, 00:43 صبح
سلام
اگر درست متوجه شده باشم ، شما تاريخ رو از برنامتون به صورت شمسي در جدول ذخيره
ميكنيد و فرض ميكنم كه فيلدي كه در جدول تاريخ رو نگه ميداره از نوع Char هست .
بعلاوه فرض كنيم كه جدول شما يك فيلد به نام in_date داره كه تاريخ رو نگه ميداره و يك فيلد به
نام Value داره كه ميزان كاركرد دستگاه رو به صورت int ذخيره ميكنه .
اگر مفروضات فوق درست باشه ، براي گروه بندي بر اساس هر ماه در سال و جمع كردن يك مقدار
كاركرد ، كد SQL مثل نمونه زير بايد بنويسيد :
select substring(in_date,1,4) as 'Year',
substring(in_date,6,2) as 'Month',
sum(value) as 'Result'
from Table_Name
group by substring(in_date,1,4),substring(in_date,6,2)
order by substring(in_date,1,4),substring(in_date,6,2)
اما منظورتون رو از گروه بندي و جمع كردن 10 روز به 10 روز ، متوجه نشدم .
آيا ميخواين از اولين تاريخي كه در جدول ذخيره شده ، 10 روز به جلو حركت كنيد و در طول راه تمام مقادير Value رو با هم جمع كنيد ؟
يا اين كه كل ماه رو به 3 دسته 10 روزه تقسيم كنيد و تمام مقادير 1 تا 10 ، 11 تا 20 و 21 تا 30 از ماه رو جداگانه با هم جمع كنيد ؟
موفق باشيد .
bmanfy
یک شنبه 13 اردیبهشت 1388, 20:56 عصر
ببخشید بعد از 5 ساعت فکر کردن دیگه حواسی نمیمونه منظورم همون GroupBy ...
دوست عزیز ممنون ولی این دستور بازم فقط رکوردهای یک روز را جمع میکنه ...
من یه چیزی مثل همین میخوام با این تفاوت که میخوام رکوردها را 10 روز 10 روز جمع کنه . GroupBy رکوردهایی را که تاریخ یکسان دارن را به یک گروه تبدیل میکنه ...
بله دوست عزیز حدمتتون عرض کردم که این کدی که من گفتم تنها برای یک روزه .
اما روش کلیش همون گروه یندی هستش که یخ مقدار فکر میخواد حالا کد دوستمون که گذاشتن رو تست کن . به احتمال زیاد جواب میده و اگه جواب نداد بگو تا یه فکری بکنم براش .
موفق باشی .
khazaie01
چهارشنبه 16 اردیبهشت 1388, 14:47 عصر
خیلی خیلی ممنون این دستورات خیلی جالب بود ...
بله من میخوام تعداد تولید را از اولین تاریخی که در جدول ذخیره شده تا تاریخ 10 روز بعد آن را با هم جمع بزنم و به همین ترتیب باز تعداد تولید را از تاریخ جدید تا 10 روز بعد آن را با هم جمع بزنم ...
یعنی حاصل جمع تعداد تولید هر 10 روز بشه یک رکورد...
اگر کوچکترین تاریخ در جدول1380/1/3 باشد خروجی باید به شکل زیر باشد:
رکورد اول حاصل جمع تعداد تولید از تاریخ 1380/1/3 تا تاریخ 1380/1/13
رکورد دوم حاصل جمع تعداد تولید از تاریخ 1380/1/14 تا تاریخ 1380/1/24
.
.
.
امیدوارم منظور من را متوجه شده باشید
راستی این 10 یک متغیر و هر عددی ممکنه باشه مثلا ممکنه 7 باشه و در این صورت خروجی به این شکل خواهد بود :
رکورد اول حاصل جمع تعداد تولید از تاریخ 1380/1/3 تا تاریخ 1380/1/10
رکورد دوم حاصل جمع تعداد تولید از تاریخ 1380/1/11 تا تاریخ 1380/1/18
.
.
.
فکر نکنم تو یک دستور بشه همچین کاری کرد ... یعنی Sql میتونه مقادیر Data را با هم جمع کنه ؟!!!! اونم شمسی ؟؟؟ کاری که فعلا انجام دادم اینه که برای این کار از یک حلقه استفاده کردم و بعد از جمع تاریخ با تعداد روز(مثلا همان 10 روز) با دستورات sql حاصل جمع تعداد تولید در بازه تاریخ بدست آمده را به عنوان رکورد جدید در جدولی Temp ذخیره میکنم ... و شرط پایان حلقه هم رسیدن به آخرین یا رکورد است ( جدول را بر اساس تاریخ Order کردم ) مشکلی که داره سرعت پایین ... مثلا اگه بر حسب هر 2 روز انجام بشه وقت گیر خواهد بود ...
khazaie01
پنج شنبه 24 اردیبهشت 1388, 20:26 عصر
یعنی هیچ کس این مشکل را نداشته ؟!!!!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.