| Author |
Topic |
|
coagulance
Yak Posting Veteran
78 Posts |
Posted - 2008-05-03 : 16:52:50
|
| I have the below data:ProdDate RntValue RNT2008.05.02 07:01:00 25 Test672008.05.02 08:15:00 29 Test562008.05.02 10:21:00 45 Test172008.05.02 12:16:00 28 Test982008.05.02 14:31:00 46 Test722008.05.02 15:31:00 75 Test782008.05.02 18:35:00 95 Test562008.05.02 19:07:00 12 Test232008.05.02 21:13:00 83 Test132008.05.02 23:31:00 34 Test22I would like to Group this in :07:00:00 to 10:00:00 10:00:00 to 15:00:0015:00:00 to 19:00:0019:00:00 to 23:59:59and Also I would like to have the Min and Max ProdDate for each Interval listed for all the result sets belonging to that grouWould be thankful for any suggestion |
|
|
cat_jesus
Aged Yak Warrior
547 Posts |
Posted - 2008-05-03 : 17:45:56
|
| Can you give an example of the desired output?An infinite universe is the ultimate cartesian product. |
 |
|
|
coagulance
Yak Posting Veteran
78 Posts |
Posted - 2008-05-03 : 18:07:56
|
| This is how it is done now , I am sure there should be a better way[Code]DECLARE @iLoadingTime int = 20, @vcEndTime11 varchar(10) = '11:00:00', @vcStartTime11 varchar(10)= '07:00:00', @vcEndTime12 varchar(10) = '15:00:00', @vcStartTime12 varchar(10)= '11:30:00', @vcEndTime21 varchar(10) = '19:00:00', @vcStartTime21 varchar(10)= '15:00:00', @vcEndTime22 varchar(10) = '23:00:00', @vcStartTime22 varchar(10)= '19:30:00' BEGIN SELECT 'Shift 1 - Pre Lunch' as 'Session' ,COUNT ([RNTID]) as 'Parts' ,CONVERT(VARCHAR(10),MIN([CompletionTime]),108) as'First Part' ,CONVERT(VARCHAR(10),MAX([CompletionTime]),108) as 'Last Part' ,convert(varchar(20),dateadd(ss,SUM([SetupLoss]) ,0),108) as 'SetUpLoss' ,convert(varchar(20),dateadd(ss,SUM([RNTDuration]) ,0),108) as 'Hours Run' ,convert(varchar(20),dateadd(ss,COUNT ([RNTID]) * @iLoadingTime ,0),108) as 'LoadingTime' ,COUNT(DISTINCT [ProgramNo]) as 'No Of Setups' ,COUNT(DISTINCT [SubAssemblyNo]) as 'Special Parts' ,(SUM([RNTDuration]) + (COUNT ([RNTID]) * @iLoadingTime))/(CAST(DATEDIFF(ss,@vcStartTime11,@vcEndTime11) as real)) FROM [RPMS].[dbo].[List_MachineShopRNT]WHERE ProductionDay = '2008.05.02' and Machine = 202 and ( CONVERT(varchar(10),[CompletionTime],108) BETWEEN @vcStartTime11 AND @vcEndTime11) union allSELECT 'Shift 1 - Post Lunch' as 'Session' ,COUNT ([RNTID]) as 'Parts' ,CONVERT(VARCHAR(10),MIN([CompletionTime]),108) as'First Part' ,CONVERT(VARCHAR(10),MAX([CompletionTime]),108) as 'Last Part' ,convert(varchar(20),dateadd(ss,SUM([SetupLoss]) ,0),108) as 'SetUpLoss' ,convert(varchar(20),dateadd(ss,SUM([RNTDuration]) ,0),108) as 'Hours Run' ,convert(varchar(20),dateadd(ss,COUNT ([RNTID]) * @iLoadingTime ,0),108) as 'LoadingTime' ,COUNT(DISTINCT [ProgramNo]) as 'No Of Setups' ,COUNT(DISTINCT [SubAssemblyNo]) as 'Special Parts' ,(SUM([RNTDuration]) + (COUNT ([RNTID]) * @iLoadingTime))/(CAST(DATEDIFF(ss,@vcStartTime12,@vcEndTime12) as real)) FROM [RPMS].[dbo].[List_MachineShopRNT]WHERE ProductionDay = '2008.05.02' and Machine = 202 and ( CONVERT(varchar(10),[CompletionTime],108) BETWEEN @vcStartTime12 AND @vcEndTime12) union allSELECT 'Shift 2 - Pre Lunch' as 'Session' ,COUNT ([RNTID]) as 'Parts' ,CONVERT(VARCHAR(10),MIN([CompletionTime]),108) as'First Part' ,CONVERT(VARCHAR(10),MAX([CompletionTime]),108) as 'Last Part' ,convert(varchar(20),dateadd(ss,SUM([SetupLoss]) ,0),108) as 'SetUpLoss' ,convert(varchar(20),dateadd(ss,SUM([RNTDuration]) ,0),108) as 'Hours Run' ,convert(varchar(20),dateadd(ss,COUNT ([RNTID]) * @iLoadingTime ,0),108) as 'LoadingTime' ,COUNT(DISTINCT [ProgramNo]) as 'No Of Setups' ,COUNT(DISTINCT [SubAssemblyNo]) as 'Special Parts' ,(SUM([RNTDuration]) + (COUNT ([RNTID]) * @iLoadingTime))/(CAST(DATEDIFF(ss,@vcStartTime21,@vcEndTime21) as real)) FROM [RPMS].[dbo].[List_MachineShopRNT]WHERE ProductionDay = '2008.05.02' and Machine = 202 and ( CONVERT(varchar(10),[CompletionTime],108) BETWEEN @vcStartTime21 AND @vcEndTime21) union allSELECT 'Shift 2 - Post Lunch' as 'Session' ,COUNT ([RNTID]) as 'Parts' ,CONVERT(VARCHAR(10),MIN([CompletionTime]),108) as'First Part' ,CONVERT(VARCHAR(10),MAX([CompletionTime]),108) as 'Last Part' ,convert(varchar(20),dateadd(ss,SUM([SetupLoss]) ,0),108) as 'SetUpLoss' ,convert(varchar(20),dateadd(ss,SUM([RNTDuration]) ,0),108) as 'Hours Run' ,convert(varchar(20),dateadd(ss,COUNT ([RNTID]) * @iLoadingTime ,0),108) as 'LoadingTime' ,COUNT(DISTINCT [ProgramNo]) as 'No Of Setups' ,COUNT(DISTINCT [SubAssemblyNo]) as 'Special Parts' ,(SUM([RNTDuration]) + (COUNT ([RNTID]) * @iLoadingTime))/(CAST(DATEDIFF(ss,@vcStartTime22,@vcEndTime22) as real)) FROM [RPMS].[dbo].[List_MachineShopRNT]WHERE ProductionDay = '2008.05.02' and Machine = 202 and ( CONVERT(varchar(10),[CompletionTime],108) BETWEEN @vcStartTime22 AND @vcEndTime22) union allSELECT 'Overtime' as 'Session' ,COUNT ([RNTID]) as 'Parts' ,CONVERT(VARCHAR(10),MIN([CompletionTime]),108) as'First Part' ,CONVERT(VARCHAR(10),MAX([CompletionTime]),108) as 'Last Part' ,convert(varchar(20),dateadd(ss,SUM([SetupLoss]) ,0),108) as 'SetUpLoss' ,convert(varchar(20),dateadd(ss,SUM([RNTDuration]) ,0),108) as 'Hours Run' ,convert(varchar(20),dateadd(ss,COUNT ([RNTID]) * @iLoadingTime ,0),108) as 'LoadingTime' ,COUNT(DISTINCT [ProgramNo]) as 'No Of Setups' ,COUNT(DISTINCT [SubAssemblyNo]) as 'Special Parts' ,(SUM([RNTDuration]) + (COUNT ([RNTID]) * @iLoadingTime))/(CAST(DATEDIFF(ss,@vcEndTime22,'06:59:00') as real)) FROM [RPMS].[dbo].[List_MachineShopRNT]WHERE ProductionDay = '2008.05.02' and Machine = 202 and ( CONVERT(varchar(10),[CompletionTime],108) BETWEEN @vcEndTime22 AND '06:59:00') END/[Code] |
 |
|
|
Lamprey
Master Smack Fu Yak Hacker
4614 Posts |
Posted - 2008-05-05 : 15:12:49
|
This might help you get to a solution DECLARE @Interval TABLE (ID TINYINT, StartHour TINYINT, EndHour TINYINT)INSERT @IntervalSELECT 1, 7, 10UNION ALL SELECT 2, 10, 15UNION ALL SELECT 3, 15, 19UNION ALL SELECT 4, 19, 24DECLARE @Yak TABLE (ProdDate DATETIME, RntValue INT, RNT VARCHAR(20))INSERT @YakSELECT '2008.05.02 07:01:00', 25, 'Test67'UNION ALL SELECT '2008.05.02 08:15:00', 29, 'Test56'UNION ALL SELECT '2008.05.02 10:21:00', 45, 'Test17'UNION ALL SELECT '2008.05.02 12:16:00', 28, 'Test98'UNION ALL SELECT '2008.05.02 14:31:00', 46, 'Test72'UNION ALL SELECT '2008.05.02 15:31:00', 75, 'Test78'UNION ALL SELECT '2008.05.02 18:35:00', 95, 'Test56'UNION ALL SELECT '2008.05.02 19:07:00', 12, 'Test23'UNION ALL SELECT '2008.05.02 21:13:00', 83, 'Test13'UNION ALL SELECT '2008.05.02 23:31:00', 34, 'Test22'SELECT MIN(Yak.ProdDate) AS MinDate, MAX(Yak.ProdDate) AS MaxDate, SUM(RntValue) AS SumRntValueFROM @Interval AS IINNER JOIN @Yak AS Yak ON DATEPART(HOUR, Yak.ProdDate) >= I.StartHour AND DATEPART(HOUR, Yak.ProdDate) < I.EndHourGROUP BY I.ID |
 |
|
|
|
|
|