"R.Smith" wrote... > > On 2015-07-30 10:59 PM, jose isaias cabrera wrote: >> >> Ok, I have one more option for you, and since you think it's fun, I need >> to exclude Saturdays and Sundays. I have a hack in the programming side >> of things, but I would like to do it right from SQLite. Thougths? > > WITH DTBase(HrsToAdd, DayStartsAt, HrsPerDay, HrsNow) AS (SELECT > 5.5, > 8.5, > 8.5, > (CAST(strftime('%H','now','localtime') AS > REAL)+(CAST(strftime('%M','now','localtime') AS REAL)/60)-8.5) > > ), DTFill(HrsToFillToday,HrsRemain) AS (SELECT > MAX(HrsPerDay-HrsNow,0), > MAX(HrsToAdd-MAX(HrsPerDay-HrsNow,0),0) > FROM DTBase > > ), DTDays(DaysToAdd,DayHrsToAdd) AS (SELECT > CAST((HrsRemain/HrsPerDay) AS INT), > (HrsRemain-(CAST((HrsRemain/HrsPerDay) AS INT)*HrsPerDay)) > FROM DTFill,DTBase > > ), DTTime(DaysToAdd,DayHrsToAdd) AS (SELECT DaysToAdd, > (DayStartsAt+(CASE WHEN HrsRemain>0 THEN DayHrsToAdd+24 ELSE > HrsNow+HrsToFillToday END)) > FROM DTBase,DTFill,DTDays > > ), NewDT(NewDateTime) AS (SELECT > datetime( 'now', 'localtime', 'start of day', '+'||DaysToAdd||' > days', '+'||DayHrsToAdd||' hours') AS NewTime > FROM DTTime > > ), WkEnd(WEDays) AS ( > SELECT ((CAST(DaysToAdd AS INT)/7)*2) FROM DTTime > UNION ALL > SELECT (WEDays+1) FROM WkEnd,NewDT WHERE > (strftime('%w',datetime(NewDateTime,'+'||WEDays||' day')) IN ('0','6')) > ) > SELECT datetime( 'now', 'localtime', 'start of day', > '+'||(MAX(DaysToAdd)+MAX(WEDays))||' days', '+'||MAX(DayHrsToAdd)||' > hours') AS NewTime > FROM DTTime, WkEnd; > > > > Wait... Let me guess... next you want Holidays added too, right? > > Well, just in case you do... here is the SQL: > (Just add your own country's Holidays in the HDays CTE) > > WITH DTBase(HrsToAdd, DayStartsAt, HrsPerDay, HrsNow) AS (SELECT > 5.5, > 8.5, > 8.5, > (CAST(strftime('%H','now','localtime') AS > REAL)+(CAST(strftime('%M','now','localtime') AS REAL)/60)-8.5) > > ), HDays(HoliDay) AS ( > SELECT '01-01' UNION ALL -- New Year's > SELECT '05-01' UNION ALL -- Worker's > SELECT '07-04' UNION ALL -- Independence > SELECT '12-25' -- Xmas > > ), DTFill(HrsToFillToday,HrsRemain) AS (SELECT > MAX(HrsPerDay-HrsNow,0), > MAX(HrsToAdd-MAX(HrsPerDay-HrsNow,0),0) > FROM DTBase > > ), DTDays(DaysToAdd,DayHrsToAdd) AS (SELECT > CAST((HrsRemain/HrsPerDay) AS INT), > (HrsRemain-(CAST((HrsRemain/HrsPerDay) AS INT)*HrsPerDay)) > FROM DTFill,DTBase > > ), DTTime(DaysToAdd,DayHrsToAdd) AS (SELECT DaysToAdd, > (DayStartsAt+(CASE WHEN HrsRemain>0 THEN DayHrsToAdd+24 ELSE > HrsNow+HrsToFillToday END)) > FROM DTBase,DTFill,DTDays > > ), NewDT(NewDateTime) AS (SELECT > datetime( 'now', 'localtime', 'start of day', '+'||DaysToAdd||' > days', '+'||DayHrsToAdd||' hours') AS NewTime > FROM DTTime > > ), WkEnd(WEDays) AS ( > SELECT ((CAST(DaysToAdd AS INT)/7)*2) FROM DTTime > UNION ALL > SELECT (WEDays+1) FROM WkEnd,NewDT > WHERE (strftime('%w',datetime(NewDateTime,'+'||WEDays||' > day')) IN ('0','6')) OR > (strftime('%m-%d',datetime(NewDateTime,'+'||WEDays||' day')) IN > (SELECT Holiday FROM HDays)) > > ) > SELECT datetime( 'now', 'localtime', 'start of day', > '+'||(MAX(DaysToAdd)+MAX(WEDays))||' days', '+'||MAX(DayHrsToAdd)||' > hours') AS NewTime > FROM DTTime, WkEnd;
How much I owe you? :-) The holidays was the next question. ;P Thanks. This will help me understand CTE much deeper/better. Thanks.