PDA

View Full Version : گرفتن query در مورد تفریق زمان ها؟؟ فوری



Tintirio
یک شنبه 21 آبان 1391, 21:35 عصر
با سلام خدمت همه ی عزیزان
من یک Table دارم که در اون یک فیلد کد شناسایی هر شخص هست و یک فیلد زمان (زمان ورود یا خروج) که با یک فیلد دیگه مشخص میکنم که زمان ورود هست یا زمان خروج مثلا عدد یک یعنی فرد وارد شرکت شده و 2 یعنی زمان خروج فرد را مشخص میکند.
حالا میخوام یک کوئری تو یه بازه ی زمانی بگیرم که بیام ساعت های که فرد داخل شرکت بود را محاسبه کنم یعنی از اختلاف ساعت ورودی و خروجی ممکنه فرد بارها به صورت پاره وقت اومده باشه تو شرکت و رفته باشه و این باید محاسبه بشه
مشکل من گرفتن کوئریه کسی هست بتونه کوئری اون رو برام مشخص کنه؟؟ممنون میشم خیلی لازم دارم

دیتابیسمم SQLServer 2008

hamed_hossani
دوشنبه 22 آبان 1391, 09:55 صبح
سلام
اگه جدول شما
loginTB>> id,user,date,type
داشته باشه
اگر به طور منظم ورود خروج کنه
string query = "SELECT TOP (2) date,type FROM [loginTB] WHERE user=userID";
Connect();
DataTable dt = Select(query);
DisConnect();
if (dt.Rows.Count > 0)
{
string dateIn = "";
string dateOut = "";
for (int i = 0; i < 2; i++)
{
if (dt.Rows[i][1].ToString() == "1")
{
dateIn = dt.Rows[i][0].ToString();
}
else if (dt.Rows[i][1].ToString() == "2")
{
dateOut = dt.Rows[i][0].ToString();
}
}
int result =Int32.Parse( dateOut) -Int32.Parse( dateIn);
}
البته باید تغییر بدین
الگوریتم جالب نیست

aliblue
دوشنبه 22 آبان 1391, 10:42 صبح
به نظر من بهتره که یه فیلد برای زمان ورود داشته باشی و یه فیلد برای زمان خروج.در این صورت تمام رکورد های هر کاربر رو select میکنی و زمان خروج هر رکورد رو منهای زمان ورودش میکنی در آخر همه رو با هم جمع میزنی تا کل زمان حضور فرد در شرکت معلوم بشه.

fakhravari
دوشنبه 22 آبان 1391, 11:04 صبح
حقوق بر اساس ساعت است؟
هر ورود یک خروج هم باید داشته باشه
با مقایسه هم و جمع تفریق میتونید در بازه زمانی تاریخ که میدید ساعت کارکرد مشخص کنید.
یکم شبیه همونچیزی میشه که در پست 2 است.

Tintirio
دوشنبه 22 آبان 1391, 16:37 عصر
ممنون از همه ی دوستان..
باید خدمتتون عزض کنم که تو این کوئری که من میخوام بگیرم چون بین دو تاریخ هستش ممکنه یه نفر تاریخ ورودش تو اون بازه ی زمانی نباشه و فقط تاریخ خروجش اونجا باشه یعنی باید چک بشه که اگه تاریخ اولین تاریخ ورود از اولین تاریخ خروج کمتر باشد دوتا تاریخ اول رو از هم کم بکنه.. نکته ی دوم اینه که میخوام ببینم دستوری داریم تو SQl که بتونیم مستقیما فیلد تاریخ ورود و خروج رو بهش بدیم خودش مدتشو هر رکورد رو دربیاره؟


"بعله حقوق بر حسب ساعت هست اما تو این چیزی که من میگم بین دو تاریخ باید کوئری گرفته بشه فقط ریز عملکرد هر فرد مشخص میشود نه برای تایین حقوق یک ماهه"

fakhravari
دوشنبه 22 آبان 1391, 17:12 عصر
یکمی ناجوره این داستان.
یه مثال بزنید

Tintirio
دوشنبه 22 آبان 1391, 20:22 عصر
یکمی ناجوره این داستان.
یه مثال بزنید
مثلا میخواییم تعداد ساعت های کل افراد رو به عنوان مثال در 10 روز بررسی کنیم وببینیم کدوم یکی از افراد بیشترین ساعت حضور رو داشته و...
مثلا شخص A از ساعت 10-12 سرکار بوده بعد رفته ساعت 3-5 دوباره اومده سر کار و شخص B شیف شب بوده از ساعت 10شب تا 4صبح فردا بوده حالا اگه من بیام از همون روزی که شخص B سرکار بوده تاریخ شروعمو شروع کنم تا 3 روز آینده ی اون روز در این صورت ساعت 10-12 شب اون به عنوان ورودی ثبت نشده و من فقط ساعت 4 صبح اون رو به عنوان خروجی دارم
انشالله که واضح توضیح داده باشم.

fakhravari
دوشنبه 22 آبان 1391, 22:28 عصر
بهتره تاریخ شروع پایان داشته باشه. که بشه محدوده بدی دستور SQL اجرا بشه.
چون شب روز تو هم است.
برای محاسبه زمان هم باید با یه حلقه هر رکورد بگیرید و زمان پایان - شروع کنیم و همینطوری جمع بزنیم.
اگر مشکل داری ساختار جدول + داده های داخلش هم بزار .

Tintirio
دوشنبه 22 آبان 1391, 22:55 عصر
بهتره تاریخ شروع پایان داشته باشه. که بشه محدوده بدی دستور SQL اجرا بشه.
چون شب روز تو هم است.
برای محاسبه زمان هم باید با یه حلقه هر رکورد بگیرید و زمان پایان - شروع کنیم و همینطوری جمع بزنیم.
اگر مشکل داری ساختار جدول + داده های داخلش هم بزار .
ببینین مشکل اینجاست که فردی که وارد میشه معلوم نیست کی خارج میشه که من بخوام زمان ورود و زمان خروج رو سوا بزارم مثلا چجوری میتونم تو SQL بگم وقتی این آی دی فرد که منحصر به فرده خارج شد زمان خروجشو بزار تو فیلد زمان خروجش مثلا داده ها اینجوری لیست میشند
فیلد های جدولم اینان
نوع زمان( ورودی یا خروجی) ، زمان . ، آی دی فرد
11t553 ، 2012/7/11 13:20 ،1
14t543 ، 2012/7/11 13:20 ،1
11t553 ، 2012/7/11 17:20 ،2
24t543 ، 2012/7/11 18:20 ،1
14t543 ، 2012/7/12 1:20 ،2