Author |
Topic |
ketanmmistry
Starting Member
8 Posts |
Posted - 2013-04-16 : 09:17:15
|
Hi,Im trying to do a date add based on a certain criteria to either add 182 days or 91 day (certificate due date) based on a what client group my learner is on. For ClientgroupID 1 its 182 and ClientgroupID 2 91.Basically what im trying to do is work out what the certifciate due date will be for a learner.However the 182 / 91 has to start counting down from the first history event startdate. So in the example below customer (42457) has been placed 31 days in one placement and then moved to another placement so 31 has to be subtracted from the 182 in his next placement. This date will then stay the same as it will be for how many days he has been actively placed in a placement.In the other example customer (22161) has been placed for 239 days, so we can work out the 182, but for his 2nd Placement i would need it to show 182 from their first start date. I hope this makes sense.i have played around with case statements but im struggling to get it to work, especially for the latest history for the learner. i will continue to look at this, but any help be appreciated greatlyCREATE TABLE [dbo].[WPR]( [Learner_ID] [int] NOT NULL, [Firstname] [char](30) NULL, [Surname] [char](30) NULL, [NI] [char](9) NULL, [DOB] [smalldatetime] NULL, [Datereferral] [smalldatetime] NULL, [ClientGroupID] [int] NOT NULL) CREATE TABLE [dbo].[HISTORY]( [HistoryID] [int] NOT NULL, [Learner_ID] [int] NULL, [DateEntered] [datetime] NOT NULL, [DateStart] [smalldatetime] NULL, [DateEnd] [smalldatetime] NULL, [Category_ID] [int] NULL) INSERT INTO wpr (Learner_ID, Firstname, Surname, NI,DOB,Datereferral, ClientGroupID) VALUES (22161,'JEFFREY','SMITH','KK991155K','1979-12-28 00:00','2012-08-07 00:00',1)INSERT INTO wpr (Learner_ID, Firstname, Surname, NI,DOB,Datereferral, ClientGroupID) VALUES (42457, 'JO','BLOGGS','PP059991Z','1968-09-28 00:00','2012-06-01 00:00',2)INSERT INTO HISTORY (HistoryID,Learner_ID,DateEntered, DateStart,DateEnd,Category_ID) VALUES (1,22161, '2012-09-19 00:00','2011-08-31 00:00','2012-04-26 00:00',6)INSERT INTO HISTORY (HistoryID,Learner_ID,DateEntered, DateStart,Category_ID) VALUES (2,22161, '2012-08-16 00:00','2012-09-17 00:00',6)INSERT INTO HISTORY (HistoryID,Learner_ID,DateEntered, DateStart,DateEnd,Category_ID) VALUES (3,42457, '2012-09-19 00:00','2011-08-31 00:00','2011-10-01 00:00',6)INSERT INTO HISTORY (HistoryID,Learner_ID,DateEntered, DateStart,Category_ID) VALUES (4,42457, '2012-08-16 00:00','2012-09-17 00:00',6)select w.Learner_ID, w.ClientGroupID, h.historyID, h.DateStart, h.DateEnd, datediff(d,h.DateStart, h.DateEnd)from wpr w left join HISTORY H (nolock) on w.Learner_ID = h.Learner_IDwhere H.Category_ID=6Order by w.Learner_id Ketan M Mistry |
|
TG
Master Smack Fu Yak Hacker
6065 Posts |
Posted - 2013-04-16 : 10:20:59
|
not sure I'm completely following. Can you please post the desired result based on this sample data?Be One with the OptimizerTG |
|
|
ketanmmistry
Starting Member
8 Posts |
Posted - 2013-04-16 : 10:52:50
|
Hi TG, Im hoping to get the following (apologies about the format):Learner_ID,ClientGroupID,historyID,DateStart,DateEnd,Datediff,CertificateDate22161,1,1,31/08/2011,26/04/2012,239,22161,1,2,17/09/2012,,,29/02/201242457,2,3,31/08/2011,01/10/2011,31,42457,2,4,17/09/2012,,,18/03/2012The certificate date i've put against the latest placement against the learner but i don't mind if it was against both learner records. as long as its the same date. Im trying to play with some CTEs now, still no joy yetKetan M Mistry |
|
|
bandi
Master Smack Fu Yak Hacker
2242 Posts |
Posted - 2013-04-17 : 02:38:19
|
[code];WITH Cte AS (select w.Learner_ID, w.[ClientGroupID], h.historyID, h.DateStart, h.DateEnd, datediff(d,h.DateStart, h.DateEnd) DaysDiff, ROW_NUMBER() OVER(PARTITION BY w.Learner_id ORDER BY h.DateStart) Rn from wpr w left join HISTORY H (nolock) on w.Learner_ID = h.Learner_ID where H.Category_ID=6)SELECT c1.*, c2.DateStart, c2.DateEnd,CASE WHEN c1.DaysDiff >=182 THEN DATEADD( DD, 182, MIN(c1.DateStart)OVER(PARTITION BY c1.Learner_id)) WHEN c1.DaysDiff <182 THEN DATEADD(DD, 182, MAX(c1.DateStart) OVER(PARTITION BY c1.Learner_id)) END CertificateDate FROM Cte c1 LEFT join cte c2 on c1.Learner_ID = c2.Learner_ID AND c1.Rn = c2.Rn+1[/code]--Chandu |
|
|
ketanmmistry
Starting Member
8 Posts |
Posted - 2013-04-23 : 11:55:20
|
Hi Chandu, Thanks for your reply i have just picked this up today as i have been unavailable. This has worked ok but i think i might have confused some way along the line. The Learner may possibly have more than 1 placement. so need to workout the 182 days from their first start date, How many days they have been in each placement and add in the example you sent it works fine for learner 22161, and did for 42457. i have changed the data around again so for learner. I would expect something like 23/05/2013 for learner 42457.I have reentered some more data.CREATE TABLE [dbo].[WPR]( [Learner_ID] [int] NOT NULL, [Firstname] [char](30) NULL, [Surname] [char](30) NULL, [NI] [char](9) NULL, [DOB] [smalldatetime] NULL, [Datereferral] [smalldatetime] NULL, [ClientGroupID] [int] NOT NULL) CREATE TABLE [dbo].[HISTORY]( [HistoryID] [int] NOT NULL, [Learner_ID] [int] NULL, [DateEntered] [datetime] NOT NULL, [DateStart] [smalldatetime] NULL, [DateEnd] [smalldatetime] NULL, [Category_ID] [int] NULL) INSERT INTO wpr (Learner_ID, Firstname, Surname, NI,DOB,Datereferral, ClientGroupID) VALUES (22161,'JEFFREY','SMITH','KK991155K','1979-12-28 00:00','2012-08-07 00:00',1)INSERT INTO wpr (Learner_ID, Firstname, Surname, NI,DOB,Datereferral, ClientGroupID) VALUES (42457, 'JO','BLOGGS','PP059991Z','1968-09-28 00:00','2012-06-01 00:00',2)INSERT INTO HISTORY (HistoryID,Learner_ID,DateEntered, DateStart,DateEnd,Category_ID) VALUES (1,22161, '2012-09-19 00:00','2011-08-31 00:00','2012-04-26 00:00',6)INSERT INTO HISTORY (HistoryID,Learner_ID,DateEntered, DateStart,Category_ID) VALUES (2,22161, '2012-08-16 00:00','2012-09-17 00:00',6)INSERT INTO HISTORY (HistoryID,Learner_ID,DateEntered, DateStart,DateEnd,Category_ID) VALUES (3,42457, '2012-09-19 00:00','2011-08-31 00:00','2011-10-01 00:00',6)INSERT INTO HISTORY (HistoryID,Learner_ID,DateEntered, DateStart,DateEnd,Category_ID) VALUES (4,42457, '2012-09-19 00:00','2012-09-17 00:00','2012-12-17 00:00',6)INSERT INTO HISTORY (HistoryID,Learner_ID,DateEntered, DateStart,DateEnd,Category_ID) VALUES (5,42457, '2012-09-19 00:00','2012-12-28 00:00','2013-01-01 00:00',6)INSERT INTO HISTORY (HistoryID,Learner_ID,DateEntered, DateStart,Category_ID) VALUES (6,42457, '2012-08-16 00:00','2013-03-29 00:00',6)select w.Learner_ID, w.ClientGroupID, h.historyID, h.DateStart, h.DateEnd, datediff(d,h.DateStart, h.DateEnd)from wpr w left join HISTORY H (nolock) on w.Learner_ID = h.Learner_IDwhere H.Category_ID=6Order by w.Learner_id I hope this makes senseKetan M Mistry |
|
|
|
|
|