الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ماهي طريقة حساب متوسط الوقت ؟

مغلقمُجابرائج
بدأه tec4serv في 3 فبراير 2013 · 67 رد · 6,397 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#51

الحمد لله

 

لا تقلق نفسك أمر استخراج النتائج النهائية نستطيع التحكم به

ولكن المهم أن نصل إلى السكربت النهائي

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#52

الله يعطيك العافيه

 

إذا بنتظارك انا

#53

هل بالإمكان أن تذكر لي صلاحياتك

إنشاء جدول ؟

إنشاء فيو ؟

إنشاء بروسيجر ؟

إنشاء فنكشن بأنواعها ؟

إنشاء ترايجرز ؟

 

حتى نحصر الأشياء التي سنتثمرها في تنفيذ السكربت

تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 20 فبراير 2013 في 14:02

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#54
أبو أحمد المبرمج كتب:

هل بالإمكان أن تذكر لي صلاحياتك

إنشاء جدول ؟

إنشاء فيو ؟

إنشاء بروسيجر ؟

إنشاء فنكشن بأنواعها ؟

إنشاء ترايجرز ؟

 

حتى نحصر الأشياء التي سنتثمرها في تنفيذ السكربت

 

السلام عليكم

 

إنشاء بروسيجر فقط

#55

هل بالإمكان أخذ صلاحية لإنشاء Table-valued Function ؟

 

حتى أستطيع إرجاع جدول النتائج وحينها بإمكانك استخدام الجدول المرتجع كمصدر بيانات لأي كائن عرض بيانات

 

أما بروسيجر فقط سيكون الأمر صعب لأن العمل سيكون ضمن البروسيجر ومشاهدة النتائج ستكون فقط ضمن السكوال سيرفر مانجمنت ستوديو

 

أم لديك اقتراح ما ؟

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#56
أبو أحمد المبرمج كتب:

هل بالإمكان أخذ صلاحية لإنشاء Table-valued Function ؟

 

حتى أستطيع إرجاع جدول النتائج وحينها بإمكانك استخدام الجدول المرتجع كمصدر بيانات لأي كائن عرض بيانات

 

أما بروسيجر فقط سيكون الأمر صعب لأن العمل سيكون ضمن البروسيجر ومشاهدة النتائج ستكون فقط ضمن السكوال سيرفر مانجمنت ستوديو

 

أم لديك اقتراح ما ؟

 

مافيه مشكلة استاذي القدير ابو احمد ،،،

 

وهل لو قمنا بعمل كود برمجي بـ السي شارب راح يكون اسهل ؟

 

طبعاص السبب انه في الجهه التي اعمل بها يمشون على نظام معين ،، بلا اراهم يستخدمون الفنكشن في الداتابيز ،، فـ لو اردت ان تعمل كود بي السي شارب ولم يكن هناك اي كلافه او ضغط عليك فـ يكون افضل

تم تعديل هذه المشاركة بواسطة tec4serv في 20 فبراير 2013 في 16:41

#57

حتى في السي شارب أنا لم أستخدم حتى اللحظة إلا الفنكشن لأنه في مصمم Linq to SQL  يقبل إسقاط الجداول والفيو والفنكشن

لأن الفنكشن ولكون القيمة المرتجعة هي من النوع الجدول فيعتبرها مثل الجدول وتتعامل معه كمصدر بيانات

أما البروسيدجر هو لتنفيذ عمل دون أن يعيد نتيجة كجدول

 

إن استطعت أخذ الصلاحية لعمل فنكشن أخبرني حتى أنفذ السكربت كفنكشن وإن لم يتم كذلك أخبرني لنرى الأنسب

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#58
أبو أحمد المبرمج كتب:

حتى في السي شارب أنا لم أستخدم حتى اللحظة إلا الفنكشن لأنه في مصمم Linq to SQL  يقبل إسقاط الجداول والفيو والفنكشن

لأن الفنكشن ولكون القيمة المرتجعة هي من النوع الجدول فيعتبرها مثل الجدول وتتعامل معه كمصدر بيانات

أما البروسيدجر هو لتنفيذ عمل دون أن يعيد نتيجة كجدول

 

إن استطعت أخذ الصلاحية لعمل فنكشن أخبرني حتى أنفذ السكربت كفنكشن وإن لم يتم كذلك أخبرني لنرى الأنسب

 

إذا الموضوع معقد إلى هذه الدرجه ،، لا مانع من اخ الصلاحية

 

اعتبرني اخذتها استاذي ابو احمد ،،،، انطلللق

#59

تفضل أخي سكربت إنشاء الفنكشن
تمرر له الفصل والسنة فيعيد لك جدول النتائج
 

USE [RequestSystem]
GO

/****** Object:  UserDefinedFunction [dbo].[GetTimeAverage]    Script Date: 20/02/2013 11:06:28 م ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
CREATE FUNCTION [dbo].[GetTimeAverage] 
(
	@Semester NVARCHAR(15), @Year NVARCHAR(15)
)
RETURNS 
@TimeAverage TABLE 
(
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[ActionBy] [nvarchar](50) NOT NULL,
	[ActionDate] [nvarchar](200) NOT NULL
)
AS
BEGIN

	--DECLARE @Semester2 NVARCHAR(15) = 'SMC02'
	--DECLARE @Year2 NVARCHAR(15) = '1434/1433'

	-- جدول لجلب بيانات كل الطلبات من أجل الفصل والسنة المحددين
	DECLARE @Tmp1 TABLE 
	(
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[Req_ID] [int] NOT NULL,
		[ActionDate] DATETIME2 NOT NULL,
		[ActionBy] [nvarchar](50) NOT NULL,
		[ActionType] [nvarchar](5) NOT NULL
	)

	INSERT @Tmp1
	( 
		[Req_ID] ,
	    [ActionDate] ,
	    [ActionBy],
	    [ActionType]
	)
	SELECT RequestsHistory.Req_ID,CAST(([ActionDate] + ' ' + ISNULL([ActionTime],''))  AS DATETIME) ,[ActionBy],[ActionType] 
	FROM  dbo.RequestsHistory INNER JOIN Requested 
	ON RequestsHistory.Req_ID = Requested.Req_ID 
	WHERE (Requested.RegSemster = @Semester) AND (Requested.RegYear = @Year) 	
	ORDER BY RequestsHistory.[Req_ID],RequestsHistory.[ActionDate]

	--SELECT * FROM @Tmp1

	-- جدول لجلب بيانات كل طلب
	DECLARE @Tmp2 TABLE 
	(
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[ActionDate] DATETIME2 NOT NULL
	)

	INSERT @Tmp2
	( 
	    [ActionDate] 
	)
	SELECT TOP ((SELECT COUNT(*) FROM @Tmp1) - 1) [ActionDate]
	FROM  @Tmp1
	ORDER BY [ID] DESC

	--SELECT * FROM @Tmp2


	DECLARE @Tmp3 TABLE 
	(
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[ActionDate] DATETIME2 NOT NULL
	)

	INSERT @Tmp3
	( 
	    [ActionDate]
	)
	SELECT [ActionDate]
	FROM  @Tmp2
	ORDER BY [ID] DESC

	--SELECT * FROM @Tmp3

	-- جدول لجمع خانة آخر تاريخ مع الجدول الأول
	DECLARE @Tmp4 TABLE 
	(
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[Req_ID] [int] NOT NULL,
		[ActionDate] DATETIME2 NOT NULL,
		[ActionBy] [nvarchar](50) NOT NULL,
		[ActionType] [nvarchar](5) NOT NULL,
		[PActionDate] DATETIME2 NOT NULL
	)

	
	INSERT @Tmp4
	( 
		[Req_ID] ,
	    [ActionDate] ,
	    [ActionBy],
	    [ActionType],
	    [PActionDate] 
	)
	SELECT [@Tmp1].[Req_ID],[@Tmp1].[ActionDate],[@Tmp1].[ActionBy],[@Tmp1].[ActionType],[@Tmp3].ActionDate
	FROM  @Tmp1
	INNER JOIN @Tmp3 
	ON [@Tmp1].ID = [@Tmp3].ID
	

	--SELECT * FROM @Tmp4


	-- جدول لسحب المستخدم ونوع الطلب مع حساب فرق الوقت لكل أكشن
	DECLARE @Tmp5 TABLE 
	(
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[ActionBy] [nvarchar](50) NOT NULL,
		[ActionDate] [int] NOT NULL,
		[ActionType] [nvarchar](5) NOT NULL
	)


	INSERT @Tmp5
	( 
	    [ActionDate] ,
	    [ActionBy],
	    [ActionType]
	)
	SELECT ABS(DATEDIFF(MINUTE,[ActionDate],PActionDate)),[ActionBy],[ActionType]
	FROM  @Tmp4
	WHERE [ActionType] IN ('T02','T08','T11')


	--SELECT * FROM @Tmp5



	-- جدول لحساب معدلات الفروقات بالدقيقة
	DECLARE @Tmp6 TABLE 
	(
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[ActionBy] [nvarchar](50) NOT NULL,
		[ActionDate] [int] NOT NULL
	)
	INSERT @Tmp6 
	(
		[ActionBy],
		[ActionDate] 
	)
	SELECT [ActionBy],((SUM([ActionDate])/COUNT([ActionDate])))
	FROM  @Tmp5
	GROUP BY [ActionBy]

	--SELECT * FROM @Tmp6


	-- جدول لوضع النتائج النهائية
	DECLARE @Tmp7 TABLE 
	(
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[ActionBy] [nvarchar](50) NOT NULL,
		[Days] [int] NOT NULL,
		[Hours] [int] NOT NULL,
		[Minutes] [int] NOT NULL
	)


	INSERT @Tmp7 
	(
		[ActionBy],
		[Days],
		[Hours],
		[Minutes]
	)
	SELECT [ActionBy],(ActionDate/1440) ,((ActionDate-(ActionDate/1440)*1440)/60) , (ActionDate - (ActionDate/1440)*1440 - ((ActionDate-(ActionDate/1440)*1440)/60)*60) 
	FROM  @Tmp6

	--SELECT * FROM @Tmp7


	-- جدول لوضع النتائج النهائية

	INSERT @TimeAverage
	(
		[ActionBy],
		[ActionDate]
	)
	SELECT [ActionBy], CAST([Days] AS NVARCHAR(5)) + ', ' + CAST([Hours] AS NVARCHAR(2)) + ':' + CAST([Minutes] AS NVARCHAR(2)) 
	FROM  @Tmp7
	
	RETURN 
END

GO

 

وهذا كود للتجربة

 

SELECT * FROM GetTimeAverage('SMC02','1434/1433')

تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 20 فبراير 2013 في 22:09

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#60

بما أن الهدف ليس وضع الإجابة فحسب وإنما الإفادة بشكل عام

سأشرح فكرة الحل وكيف تخلصت من الحلقات

 

بعد أن يتم ترتيب السجلات بحسب رقم الطلب ثم التاريخ

نحن بحاجة لحساب الفرق بين تاريخ كل سجل و تاريخ السجل الذي يسبقه

لهذا في الحالات الأولى استخدمنا حلقات لكي نستطيع التعامل مع سجلين سجلين معا

 

ولكن بعد أن ظهر البطء قلت لا بد من إيجاد بديل عن الحلقات فخطر لي الحل التالي

 

بعد أن أضع السجلات المرتبة في جدول جديد (للحصول على ID جديد متسلسل ومرتب)

أقوم بإنشاء جدول جديد يحوي التاريخ فقط و لكن أستخدم الكلمة TOP  ليأخذ عدد محدد وليس كل السجلات

العدد المطلوب هو العدد الكلي ناقص واحد وبحيث يكون مرتب عكسيا وذلك لاستبعاد أول سجل

ثم أرتب الناتج عكسيا مرة أخرى

ماذا حصل ؟

لقد أخذت كل السجلات ما عدا الأول ولكون TOP  تأخذ من الأول لهذا عكست الترتيب حتى يكون الأول في الأخير ويتم إهماله

ومن ثم عندما رتبته عكسيا مرة أخرى يكون قد حصلت على جدول بالتواريخ يبدء من الثاني إلى الأخير

هنا أقوم بدمج الجدولين وفق الرقم المتسلسل

وبهذا أصبح لدي في كل سجل التاريخ والتاريخ السابق وأستطيع الآن إنشاء حقل محسوب من كلاهما وفق دالة حساب فرق التاريخ

تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 20 فبراير 2013 في 22:22

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#61

الله يعطيك الف عااافية ،، عمل ومجهود رااااائع ،، تم تنفيذ الفنكشن وهو يعمل بشكل ممتاز ،،

 

ولكن مهندس ابو احمد ،، هل اعتمد على النتائج بشكل نهائي ؟؟؟؟ لان النتائج تختلف ايضا عن النتائج بالاكواد السابقه

تم تعديل هذه المشاركة بواسطة tec4serv في 24 فبراير 2013 في 08:32

#62

الحمد لله

فله الفضل والمِنة

بالنسبة للنتائج حبذا لو تجرب على مجموعة صغيرة مثلا 10 أو 20 سجل

بحيث يمكنك حسابهم بشكل يدوي ومنها تتأكد من النتائج

لأني أنا عملتها وفق الخوارزمية التي وضعناها أول مرة

اختلاف النتائج في كل مرة لأننا في كل مرة نعدل بالشروط فمثلا نستثني الطلاب ثم نأخذ الفصل الأول ثم السنة وهكذا

على أي حال من خلال النتائج تدرك إن كانت منطقية أو مبالغ فيها

فمثلا لو ظهر متوسط أحدهم عدد كبير من الأيام والمعلوم أن معظم الطلبات يوقعها بنفس اليوم أو ثاني يوم إذا هناك خلل

أما إذا كانت قريبة من المتوقع فتكون أقرب لواقع وفي النهاية المسألة نسبية

بمعنى بغض النظر عن النتائج فإذا رتبت المعدلات تصاعديا فيكون على الواقع الأقل هو الأنشط والأكبر هو الأقل نشاطا

وأفضل شيء هو تجريب من أجل عدد قليل من البيانات

ولكن ليكن بالمعلوم أنه ستكون فوارق كبيرة بين معدل عدد قليل من البيانات وبين المعدل بالنسبة للسجلات ككل وذلك كلما كبرت المعطيات اتجه المعدل إلى الاستقرار أكثر بينما من أجل عدد قليل قد تأتي نتيجة واحد ترفع أو تنزل المعدل بشكل كبير

كمثال كان أحدهم في إجازة عدة أيام فستغير معدله الذي يكون بالساعات إلى أيام

بينما لو كان العدد كبير فلن تؤثر لأن الفارق سيقسم على عدد كبير وبالتالي سيكون شبه مهمل

والله ولي التوفيق

تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 24 فبراير 2013 في 09:32

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#63
أبو أحمد المبرمج كتب:

الحمد لله

فله الفضل والمِنة

بالنسبة للنتائج حبذا لو تجرب على مجموعة صغيرة مثلا 10 أو 20 سجل

بحيث يمكنك حسابهم بشكل يدوي ومنها تتأكد من النتائج

لأني أنا عملتها وفق الخوارزمية التي وضعناها أول مرة

اختلاف النتائج في كل مرة لأننا في كل مرة نعدل بالشروط فمثلا نستثني الطلاب ثم نأخذ الفصل الأول ثم السنة وهكذا

على أي حال من خلال النتائج تدرك إن كانت منطقية أو مبالغ فيها

فمثلا لو ظهر متوسط أحدهم عدد كبير من الأيام والمعلوم أن معظم الطلبات يوقعها بنفس اليوم أو ثاني يوم إذا هناك خلل

أما إذا كانت قريبة من المتوقع فتكون أقرب لواقع وفي النهاية المسألة نسبية

بمعنى بغض النظر عن النتائج فإذا رتبت المعدلات تصاعديا فيكون على الواقع الأقل هو الأنشط والأكبر هو الأقل نشاطا

وأفضل شيء هو تجريب من أجل عدد قليل من البيانات

ولكن ليكن بالمعلوم أنه ستكون فوارق كبيرة بين معدل عدد قليل من البيانات وبين المعدل بالنسبة للسجلات ككل وذلك كلما كبرت المعطيات اتجه المعدل إلى الاستقرار أكثر بينما من أجل عدد قليل قد تأتي نتيجة واحد ترفع أو تنزل المعدل بشكل كبير

كمثال كان أحدهم في إجازة عدة أيام فستغير معدله الذي يكون بالساعات إلى أيام

بينما لو كان العدد كبير فلن تؤثر لأن الفارق سيقسم على عدد كبير وبالتالي سيكون شبه مهمل

والله ولي التوفيق

 

الله يعطيك الف عافيه يا استاذي ابو احمد ،، شغل ومجهود تشكر عليه ،، بارك الله في علمك

 

راح اجرب على عدد محدد وارد لك ،، الان جالس اعدل على الكود لرغبتي في اظهار عدد الطلبات لكل مستخدم اما الوقت ،، يارب تضبط معي

#64

ابو احمد ،،،

 

الان لو حبيت اضيف عمود على النتائج يظهر لي عدد الطلبات لكل مسؤول كيف راح تكون الطريقة ؟

 

يعني لو حددت الفصل الثاني لعام 1434/1433 ابي متوسط الوقت لكل مسؤول مع مجموع الطلبات لكل مسؤول خلال هذه الفتره كيف راح تكون الطريقة ؟ اتوقع تعديل بسيط على الكود

#65 أفضل إجابة

نعم أخي لأننا في الجدول السادس نقسم مجموع الأوقات على عددها وبالتالي أضفت خانة لحفظ هذا العدد وتم تناقله إلى أن يصل للجدول النهائي
 

USE [RequestSystem]
GO
/****** Object:  UserDefinedFunction [dbo].[GetTimeAverage]    Script Date: 25/02/2013 11:32:10 ص ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER FUNCTION [dbo].[GetTimeAverage] 
(
	@Semester NVARCHAR(15), @Year NVARCHAR(15)
)
RETURNS 
@TimeAverage TABLE 
(
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[ActionBy] [nvarchar](50) NOT NULL,
	[ActionDate] [nvarchar](200) NOT NULL,
	[ActionCount] [int] NOT NULL
)
AS
BEGIN

	--DECLARE @Semester2 NVARCHAR(15) = 'SMC02'
	--DECLARE @Year2 NVARCHAR(15) = '1434/1433'

	-- جدول لجلب بيانات كل الطلبات من أجل الفصل والسنة المحددين
	DECLARE @Tmp1 TABLE 
	(
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[Req_ID] [int] NOT NULL,
		[ActionDate] DATETIME2 NOT NULL,
		[ActionBy] [nvarchar](50) NOT NULL,
		[ActionType] [nvarchar](5) NOT NULL
	)

	INSERT @Tmp1
	( 
		[Req_ID] ,
	    [ActionDate] ,
	    [ActionBy],
	    [ActionType]
	)
	SELECT RequestsHistory.Req_ID,CAST(([ActionDate] + ' ' + ISNULL([ActionTime],''))  AS DATETIME) ,[ActionBy],[ActionType] 
	FROM  dbo.RequestsHistory INNER JOIN Requested 
	ON RequestsHistory.Req_ID = Requested.Req_ID 
	WHERE (Requested.RegSemster = @Semester) AND (Requested.RegYear = @Year) 	
	ORDER BY RequestsHistory.[Req_ID],RequestsHistory.[ActionDate]

	--SELECT * FROM @Tmp1

	-- جدول لجلب بيانات كل طلب
	DECLARE @Tmp2 TABLE 
	(
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[ActionDate] DATETIME2 NOT NULL
	)

	INSERT @Tmp2
	( 
	    [ActionDate] 
	)
	SELECT TOP ((SELECT COUNT(*) FROM @Tmp1) - 1) [ActionDate]
	FROM  @Tmp1
	ORDER BY [ID] DESC

	--SELECT * FROM @Tmp2


	DECLARE @Tmp3 TABLE 
	(
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[ActionDate] DATETIME2 NOT NULL
	)

	INSERT @Tmp3
	( 
	    [ActionDate]
	)
	SELECT [ActionDate]
	FROM  @Tmp2
	ORDER BY [ID] DESC

	--SELECT * FROM @Tmp3

	-- جدول لجمع خانة آخر تاريخ مع الجدول الأول
	DECLARE @Tmp4 TABLE 
	(
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[Req_ID] [int] NOT NULL,
		[ActionDate] DATETIME2 NOT NULL,
		[ActionBy] [nvarchar](50) NOT NULL,
		[ActionType] [nvarchar](5) NOT NULL,
		[PActionDate] DATETIME2 NOT NULL
	)

	
	INSERT @Tmp4
	( 
		[Req_ID] ,
	    [ActionDate] ,
	    [ActionBy],
	    [ActionType],
	    [PActionDate] 
	)
	SELECT [@Tmp1].[Req_ID],[@Tmp1].[ActionDate],[@Tmp1].[ActionBy],[@Tmp1].[ActionType],[@Tmp3].ActionDate
	FROM  @Tmp1
	INNER JOIN @Tmp3 
	ON [@Tmp1].ID = [@Tmp3].ID
	

	--SELECT * FROM @Tmp4


	-- جدول لسحب المستخدم ونوع الطلب مع حساب فرق الوقت لكل أكشن
	DECLARE @Tmp5 TABLE 
	(
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[ActionBy] [nvarchar](50) NOT NULL,
		[ActionDate] [int] NOT NULL,
		[ActionType] [nvarchar](5) NOT NULL
	)


	INSERT @Tmp5
	( 
	    [ActionDate] ,
	    [ActionBy],
	    [ActionType]
	)
	SELECT ABS(DATEDIFF(MINUTE,[ActionDate],PActionDate)),[ActionBy],[ActionType]
	FROM  @Tmp4
	WHERE [ActionType] IN ('T02','T08','T11')


	--SELECT * FROM @Tmp5



	-- جدول لحساب معدلات الفروقات بالدقيقة
	DECLARE @Tmp6 TABLE 
	(
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[ActionBy] [nvarchar](50) NOT NULL,
		[ActionDate] [int] NOT NULL,
		[ActionCount] [int] NOT NULL
	)

	INSERT @Tmp6 
	(
		[ActionBy],
		[ActionDate],
		[ActionCount] 
	)
	SELECT [ActionBy]
		, (SUM([ActionDate])/COUNT([ActionDate]))
		, COUNT([ActionDate])
	FROM  @Tmp5
	GROUP BY [ActionBy]

	--SELECT * FROM @Tmp6


	-- جدول لوضع النتائج النهائية
	DECLARE @Tmp7 TABLE 
	(
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[ActionBy] [nvarchar](50) NOT NULL,
		[Days] [int] NOT NULL,
		[Hours] [int] NOT NULL,
		[Minutes] [int] NOT NULL,
		[ActionCount] [int] NOT NULL 
	)


	INSERT @Tmp7 
	(
		[ActionBy],
		[Days],
		[Hours],
		[Minutes],
		[ActionCount]
	)
	SELECT [ActionBy],(ActionDate/1440) 
		, ((ActionDate-(ActionDate/1440)*1440)/60) 
		, (ActionDate - (ActionDate/1440)*1440 - ((ActionDate-(ActionDate/1440)*1440)/60)*60) 
		, [ActionCount]
	FROM  @Tmp6

	--SELECT * FROM @Tmp7


	-- جدول لوضع النتائج النهائية

	INSERT @TimeAverage
	(
		[ActionBy],
		[ActionDate],
		[ActionCount]
	)
	SELECT [ActionBy]
	, CAST([Days] AS NVARCHAR(5)) + ', ' + CAST([Hours] AS NVARCHAR(2)) + ':' + CAST([Minutes] AS NVARCHAR(2))
	, [ActionCount]
	FROM  @Tmp7
	
	RETURN 
END

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#66

الله يعطيك الف الف عافية ،،، بارك الله فيك وفي علمك ،،، اتعبتك معاي مهندس ابو احمد

 

لك مني الدعاء ،،،  مدري كيف ارد لك هذا الجميل :(

#67

وفيكم بارك أخي

لا تشغل بالك أخي فقد وصلني المقابل

ولتعلم أني مستفيد أكثر منك

فأنت استفادتك الحصول على المطلوب

أما أنا فأولا أحتسب أجر هذا التعاون عند الله

ثانيا هي زيادة ممارسة وخبرة

ثالثا نقاش قد يكون مرجع ذو فائدة لآخرين يأتو من بعدنا

 

ولهذا لا فضل لأحد على أحد والفضل كله لله

 

فالحمد لله رب العالمين

تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 25 فبراير 2013 في 17:05

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#68

بارك الله فيك ،، استفدت منك كثير الله يعطيك العافيه

هذا الموضوع مغلق.

مواضيع مشابهة