<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-29286778.post7286957114183628702..comments</id><updated>2009-04-29T08:14:59.232-04:00</updated><category term='Feature Creeper'/><category term='FAQs and not so FAQs'/><category term='SQL Puzzles'/><category term='Pass time with SQL'/><title type='text'>Comments on SQL Garbage Collector: A Scenario to Ponder #13</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.sqlpointers.com/feeds/7286957114183628702/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default'/><link rel='alternate' type='text/html' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html'/><author><name>Omnibuzz</name><uri>http://www.blogger.com/profile/04342835880399785393</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-29286778.post-6311064818350367295</id><published>2008-01-06T01:33:00.000-05:00</published><updated>2008-01-06T01:33:00.000-05:00</updated><title type='text'>Thanks for the nice info&lt;br&gt;Regards,&lt;br&gt;Jack&lt;br&gt;&lt;a...</title><content type='html'>Thanks for the nice info&lt;BR/&gt;Regards,&lt;BR/&gt;Jack&lt;BR/&gt;&lt;A HREF="http://db2examples.googlepages.com/" REL="nofollow"&gt;http://db2examples.googlepages.com/&lt;/A&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/6311064818350367295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/6311064818350367295'/><link rel='alternate' type='text/html' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html?showComment=1199601180000#c6311064818350367295' title=''/><author><name>db2</name><uri>http://www.blogger.com/profile/10844770418445158127</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html' ref='tag:blogger.com,1999:blog-29286778.post-7286957114183628702' source='http://www.blogger.com/feeds/29286778/posts/default/7286957114183628702' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-429060636'/></entry><entry><id>tag:blogger.com,1999:blog-29286778.post-156888206016169605</id><published>2007-12-28T08:49:00.000-05:00</published><updated>2007-12-28T08:49:00.000-05:00</updated><title type='text'>what do u think?&lt;br&gt;&lt;br&gt;&lt;br&gt;SELECT svcCallNo, Actu...</title><content type='html'>what do u think?&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;SELECT svcCallNo, ActualCreate, ActualEnd, DATEDIFF(hh, ActualCreate, ActualEnd)- &lt;BR/&gt;DATEDIFF(dd, ActualCreate, ActualEnd) * 15 - DATEDIFF (ww, ActualCreate, ActualEnd) *18&lt;BR/&gt;FROM&lt;BR/&gt;(SELECT svccallno, &lt;BR/&gt;case WHEN crDow between 1 AND 5&lt;BR/&gt; THEN case WHEN datepart(hh, createtime) &lt; 9 then dateadd(hh,9, crdate)&lt;BR/&gt;    WHEN datepart(hh, createtime) &gt;= 18 then &lt;BR/&gt;   CASE crDOW WHEN 5 THEN dateadd(hh,81, crdate)&lt;BR/&gt;    ELSE dateadd(hh,33, crdate) END&lt;BR/&gt;    ELSE createtime END&lt;BR/&gt; ELSE dateadd(hh, (8-crdow)*24+9, crdate) END ActualCreate, createtime,&lt;BR/&gt;case WHEN resDow in (6,7) THEN dateadd(hh,(5-resDow)*24+18,resDate)&lt;BR/&gt;     ELSE &lt;BR/&gt; case when datepart(hh, resolutiontime) &gt;= 18 then dateadd(hh,18,resdate)&lt;BR/&gt;      when datepart(hh, resolutiontime) &lt; 9 then&lt;BR/&gt;   CASE resDow WHEN 1 then dateadd(hh, -54, resdate)&lt;BR/&gt;    ELSE dateadd(hh, -6, resdate) END&lt;BR/&gt;      ELSE resolutiontime END&lt;BR/&gt;END ActualEnd, resolutiontime&lt;BR/&gt;from&lt;BR/&gt;(select svccallNo, createtime, cast(floor(cast(createtime as float)) as datetime) crDate, datepart(dw, createtime) crDow, &lt;BR/&gt;ResolutionTime, cast(floor(cast(resolutiontime as float)) as datetime)resDate, datepart(dw, resolutiontime) resDow&lt;BR/&gt;FROM #ServiceCalls)A)B</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/156888206016169605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/156888206016169605'/><link rel='alternate' type='text/html' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html?showComment=1198849740000#c156888206016169605' title=''/><author><name>Arumugam</name><uri>http://www.blogger.com/profile/01676562513256026368</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html' ref='tag:blogger.com,1999:blog-29286778.post-7286957114183628702' source='http://www.blogger.com/feeds/29286778/posts/default/7286957114183628702' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1135794614'/></entry><entry><id>tag:blogger.com,1999:blog-29286778.post-6469846294492878275</id><published>2007-10-27T11:36:00.000-04:00</published><updated>2007-10-27T11:36:00.000-04:00</updated><title type='text'>Hi Hugo,&lt;br&gt;   There was no need to comment the co...</title><content type='html'>Hi Hugo,&lt;BR/&gt;   There was no need to comment the code. The test data and the column names were self-explanatory. Your solution was too overwhelming and humbling at the same time. After looking at your solution, mine looks like child play. I learnt a lot from it, a new way of thinking in sets. &lt;BR/&gt;&lt;BR/&gt;I am just leaving your answer as the single best answer to this scenario. Its simple and elegant.&lt;BR/&gt;I will be constantly looking at how to improve your answer :) &lt;BR/&gt;-Omni</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/6469846294492878275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/6469846294492878275'/><link rel='alternate' type='text/html' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html?showComment=1193499360000#c6469846294492878275' title=''/><author><name>Omnibuzz</name><uri>http://www.blogger.com/profile/04342835880399785393</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html' ref='tag:blogger.com,1999:blog-29286778.post-7286957114183628702' source='http://www.blogger.com/feeds/29286778/posts/default/7286957114183628702' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-817797350'/></entry><entry><id>tag:blogger.com,1999:blog-29286778.post-994022600855231516</id><published>2007-10-24T16:30:00.000-04:00</published><updated>2007-10-24T16:30:00.000-04:00</updated><title type='text'>Hi Omnibuzz,&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Sorry for not catching...</title><content type='html'>Hi Omnibuzz,&lt;BR/&gt;&lt;BR/&gt;&gt;&gt;I am going to take some time to understand your thought process before I comment&lt;&lt;&lt;BR/&gt;&lt;BR/&gt;Sorry for not catching it sooner. And for forgetting to comment my code.&lt;BR/&gt;&lt;BR/&gt;In case you're still studying, the idea is quite simple.&lt;BR/&gt;&lt;BR/&gt;The first step (in the derived table) uses two CASE expressions to roll forward or roll back to beginning or end of next/previous business day (the DATEADD/DATEDIFF trick is well known for stripping off a time portion, but by using different time constants can be used to get a fixed time offset as well). This changes a begin/end datetime outside of business hours to the correct datetime for the calculation.&lt;BR/&gt;&lt;BR/&gt;The second step calculates the number of hours between the "corrected" begin and end datetime, then subtracts 15 hours for each midnight enclosed in the range (since there are 15 non-working hours each day), and then 18 hours for each spanned weekend (for the 2 * 9 remaining hours of the saturday and sunday are not working hours either).</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/994022600855231516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/994022600855231516'/><link rel='alternate' type='text/html' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html?showComment=1193257800000#c994022600855231516' title=''/><author><name>Hugo Kornelis</name><uri>http://sqlblog.com/blogs/hugo_kornelis/default.aspx</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html' ref='tag:blogger.com,1999:blog-29286778.post-7286957114183628702' source='http://www.blogger.com/feeds/29286778/posts/default/7286957114183628702' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1260951794'/></entry><entry><id>tag:blogger.com,1999:blog-29286778.post-3196947863890045333</id><published>2007-10-16T16:00:00.000-04:00</published><updated>2007-10-16T16:00:00.000-04:00</updated><title type='text'>IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES ...</title><content type='html'>IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='ServiceCalls') &lt;BR/&gt;    DROP TABLE ServiceCalls&lt;BR/&gt;GO&lt;BR/&gt;&lt;BR/&gt;create table ServiceCalls&lt;BR/&gt;(&lt;BR/&gt; SvcCallNo int,&lt;BR/&gt; SvcCallDesc varchar(100),&lt;BR/&gt; CreateTime datetime,&lt;BR/&gt; ResolutionTime datetime&lt;BR/&gt;)&lt;BR/&gt;&lt;BR/&gt;insert into ServiceCalls&lt;BR/&gt;select 4709,'I have the complaint #4709','Oct 9 2007 6:59AM','Oct 10 2007 12:59PM' union all&lt;BR/&gt;select 4716,'I have the complaint #4716','Oct 8 2007 12:23PM','Oct 10 2007 6:23PM' union all&lt;BR/&gt;select 4685,'I have the complaint #4685','Oct 7 2007 12:04PM','Oct 9 2007 6:04PM' union all&lt;BR/&gt;select 4695,'I have the complaint #4695','Oct 6 2007 10:59AM','Oct 9 2007 4:59PM' union all&lt;BR/&gt;select 4654,'I have the complaint #4654','Oct 5 2007 10:29AM','Oct 8 2007 4:29PM' union all&lt;BR/&gt;select 4692,'I have the complaint #4692','Oct 4 2007 10:00AM','Oct 8 2007 4:00PM' union all&lt;BR/&gt;select 4637,'I have the complaint #4637','Oct 3 2007 9:27AM','Oct 8 2007 3:27PM' union all&lt;BR/&gt;select 4674,'I have the complaint #4674','Oct 2 2007 1:52PM','Oct 6 2007 7:52PM' union all&lt;BR/&gt;select 4689,'I have the complaint #4689','Oct 1 2007 9:36AM','Oct 5 2007 3:36PM' union all&lt;BR/&gt;select 4700,'I have the complaint #4700','Oct 1 2007 4:43AM','Oct 4 2007 10:43AM' ;&lt;BR/&gt;&lt;BR/&gt;WITH    WorkingHours&lt;BR/&gt;          AS ( SELECT   SvcCallNo,&lt;BR/&gt;                        CreateTime,&lt;BR/&gt;                        ResolutionTime,&lt;BR/&gt;                        ActualCreateTime = CASE WHEN DATEPART(dw, CreateTime) = 1 THEN  -- sunday&lt;BR/&gt;                                                     DATEADD(hh, 9, CAST(FLOOR(CAST(DATEADD(d, 1, CreateTime) AS FLOAT)) AS DATETIME))&lt;BR/&gt;                                                WHEN DATEPART(dw, CreateTime) = 7 THEN   -- saturday&lt;BR/&gt;                                                     DATEADD(hh, 9, CAST(FLOOR(CAST(DATEADD(d, 2, CreateTime) AS FLOAT)) AS DATETIME))&lt;BR/&gt;                                                ELSE CASE WHEN DATEPART(hh, CreateTime) &lt; 9 THEN DATEADD(hh, 9, CAST(FLOOR(CAST(CreateTime AS FLOAT)) AS DATETIME))&lt;BR/&gt;                                                          WHEN DATEPART(hh, CreateTime) &gt;= 18 THEN DATEADD(hh, 33, CAST(FLOOR(CAST(CreateTime AS FLOAT)) AS DATETIME))&lt;BR/&gt;                                                          ELSE CreateTime&lt;BR/&gt;                                                     END&lt;BR/&gt;                                           END,&lt;BR/&gt;                        ActualResolutionTime = CASE WHEN DATEPART(dw, ResolutionTime) = 1 THEN  -- sunday&lt;BR/&gt;                                                         DATEADD(hh, 18, CAST(FLOOR(CAST(DATEADD(d, -2, ResolutionTime) AS FLOAT)) AS DATETIME))&lt;BR/&gt;                                                    WHEN DATEPART(dw, ResolutionTime) = 7 THEN   -- saturday&lt;BR/&gt;                                                         DATEADD(hh, 18, CAST(FLOOR(CAST(DATEADD(d, -1, ResolutionTime) AS FLOAT)) AS DATETIME))&lt;BR/&gt;                                                    ELSE CASE WHEN DATEPART(hh, ResolutionTime) &gt;= 18 THEN DATEADD(hh, 18, CAST(FLOOR(CAST(ResolutionTime AS FLOAT)) AS DATETIME))&lt;BR/&gt;                                                              ELSE ResolutionTime&lt;BR/&gt;                                                         END&lt;BR/&gt;                                               END&lt;BR/&gt;               FROM     ServiceCalls&lt;BR/&gt;             ) ,&lt;BR/&gt;        WorkingHoursDiff&lt;BR/&gt;          AS ( SELECT   SvcCallNo,&lt;BR/&gt;                        CreateTime,&lt;BR/&gt;                        ResolutionTime,&lt;BR/&gt;                        ActualCreateTime,&lt;BR/&gt;                        ActualResolutionTime,&lt;BR/&gt;                        DayCount = DATEDIFF(DAY, ActualCreateTime, ActualResolutionTime) + 1&lt;BR/&gt;               FROM     WorkingHours&lt;BR/&gt;             ) ,&lt;BR/&gt;        WorkingHoursDiffExceptWeekends&lt;BR/&gt;          AS ( SELECT   SvcCallNo,&lt;BR/&gt;                        CreateTime,&lt;BR/&gt;                        ResolutionTime,&lt;BR/&gt;                        ActualCreateTime,&lt;BR/&gt;                        ActualResolutionTime,&lt;BR/&gt;                        /* TODO insert your work calendar here*/&lt;BR/&gt;                        DayCountExceptWeekends = DayCount / 7 * 5 + DayCount % 7 - ( SELECT COUNT(*)&lt;BR/&gt;                                                                                     FROM   ( SELECT    1 AS d&lt;BR/&gt;                                                                                              UNION ALL&lt;BR/&gt;                                                                                              SELECT    2&lt;BR/&gt;                                                                                              UNION ALL&lt;BR/&gt;                                                                                              SELECT    3&lt;BR/&gt;                                                                                              UNION ALL&lt;BR/&gt;                                                                                              SELECT    4&lt;BR/&gt;                                                                                              UNION ALL&lt;BR/&gt;                                                                                              SELECT    5&lt;BR/&gt;                                                                                              UNION ALL&lt;BR/&gt;                                                                                              SELECT    6&lt;BR/&gt;                                                                                              UNION ALL&lt;BR/&gt;                                                                                              SELECT    7&lt;BR/&gt;                                                                                            ) weekdays&lt;BR/&gt;                                                                                     WHERE  d &lt;= DayCount % 7&lt;BR/&gt;                                                                                            AND DATENAME(WEEKDAY, ActualResolutionTime - d + 1) IN ( 'Saturday', 'Sunday' )&lt;BR/&gt;                                                                                   )&lt;BR/&gt;               FROM     WorkingHoursDiff&lt;BR/&gt;             )&lt;BR/&gt;    SELECT  SvcCallNo,&lt;BR/&gt;            CreateTime,&lt;BR/&gt;            ResolutionTime,&lt;BR/&gt;            ActualCreateTime,&lt;BR/&gt;            ActualResolutionTime,&lt;BR/&gt;            ActualHoursWorked = DayCountExceptWeekends * 9&lt;BR/&gt;    FROM    WorkingHoursDiffExceptWeekends</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/3196947863890045333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/3196947863890045333'/><link rel='alternate' type='text/html' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html?showComment=1192564800000#c3196947863890045333' title=''/><author><name>Erhan Hosca</name><uri>http://www.hosca.com</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html' ref='tag:blogger.com,1999:blog-29286778.post-7286957114183628702' source='http://www.blogger.com/feeds/29286778/posts/default/7286957114183628702' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1463570809'/></entry><entry><id>tag:blogger.com,1999:blog-29286778.post-5290816955677383590</id><published>2007-10-15T20:58:00.000-04:00</published><updated>2007-10-15T20:58:00.000-04:00</updated><title type='text'>That was fast. I never thought I would get an answ...</title><content type='html'>That was fast. I never thought I would get an answer for atleast a week. Both the solutions are overwhelming in different senses.&lt;BR/&gt;&lt;BR/&gt;Changos, Welcome to my blog. I appriciate your effort in coming up with the solution. No offences, but looking at the length, I can never ever understand the logic. But I should say you are fast to give it under 6 hours of posting. I will run some tests and let you know my comments.&lt;BR/&gt;&lt;BR/&gt;And Hugo.. Boy, Am I glad you commented :) Good to hear from you. &lt;BR/&gt;Your solution is overwhelming and not possible ( at least not for me yet). I am going to take some time to understand your thought process before I comment. Learn it before I appriciate it :)&lt;BR/&gt;-Omni</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/5290816955677383590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/5290816955677383590'/><link rel='alternate' type='text/html' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html?showComment=1192496280000#c5290816955677383590' title=''/><author><name>Omnibuzz</name><uri>http://www.blogger.com/profile/04342835880399785393</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html' ref='tag:blogger.com,1999:blog-29286778.post-7286957114183628702' source='http://www.blogger.com/feeds/29286778/posts/default/7286957114183628702' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-817797350'/></entry><entry><id>tag:blogger.com,1999:blog-29286778.post-3297687734920990101</id><published>2007-10-10T18:10:00.000-04:00</published><updated>2007-10-10T18:10:00.000-04:00</updated><title type='text'>Hi Omnibuzz,&lt;br&gt;&lt;br&gt;Good to see you blogging again...</title><content type='html'>Hi Omnibuzz,&lt;BR/&gt;&lt;BR/&gt;Good to see you blogging again!&lt;BR/&gt;&lt;BR/&gt;Here's a query that will work in all versions of SQL, using no calendar table and only a single table scan. I do hope that formatting is retained...&lt;BR/&gt;&lt;BR/&gt;BTW, you never specified how parts of hours have to be handled. I added test cases for this, but did not try to correct the results as I have no idea what results you want.&lt;BR/&gt;&lt;BR/&gt;BTW2, I also added some more interesting test data.&lt;BR/&gt;&lt;BR/&gt;Here's the query:&lt;BR/&gt;&lt;BR/&gt;-- Add some extra test data&lt;BR/&gt;insert into #ServiceCalls&lt;BR/&gt;select 4444,'This one spans more than a single week','2007-10-01T04:43:00', '2007-10-14T10:43:00'&lt;BR/&gt;union all&lt;BR/&gt;select 4445,'Opened after 6 PM, closed before 9 AM','2007-10-03T21:43:00','2007-10-05T05:43:00'&lt;BR/&gt;union all&lt;BR/&gt;select 4446,'Opened friday evening, closed monday morning','2007-10-05T21:43:00','2007-10-08T05:43:00'&lt;BR/&gt;union all&lt;BR/&gt;select 4447,'Testcase 1 for rounding of hours and minutes','2007-10-05T09:05:00','2007-10-05T17:55:00'&lt;BR/&gt;union all&lt;BR/&gt;select 4448,'Testcase 2 for rounding of hours and minutes','2007-10-05T09:55:00','2007-10-05T17:05:00'&lt;BR/&gt;go&lt;BR/&gt;SELECT SvcCallNo, ActualCreateTime, ActualResolutionTime,&lt;BR/&gt;       DATEDIFF(hh, ActualCreateTime, ActualResolutionTime)&lt;BR/&gt;     - DATEDIFF(dd, ActualCreateTime, ActualResolutionTime) * 15&lt;BR/&gt;     - DATEDIFF(ww, ActualCreateTime, ActualResolutionTime) * 18 AS Effort&lt;BR/&gt;FROM&lt;BR/&gt; (SELECT SvcCallNo,&lt;BR/&gt;         CASE DATENAME(dw, CreateTimeBusinessHours)&lt;BR/&gt;          WHEN 'Saturday'&lt;BR/&gt;          THEN DATEADD(dd, DATEDIFF(dd, -2, CreateTimeBusinessHours), '09:00:00')&lt;BR/&gt;          WHEN 'Sunday'&lt;BR/&gt;          THEN DATEADD(dd, DATEDIFF(dd, -1, CreateTimeBusinessHours), '09:00:00')&lt;BR/&gt;          ELSE CreateTimeBusinessHours&lt;BR/&gt;         END AS ActualCreateTime,&lt;BR/&gt;         CASE DATENAME(dw, ResolutionTimeBusinessHours)&lt;BR/&gt;          WHEN 'Sunday'&lt;BR/&gt;          THEN DATEADD(dd, DATEDIFF(dd, 2, ResolutionTimeBusinessHours), '18:00:00')&lt;BR/&gt;          WHEN 'Saturday'&lt;BR/&gt;          THEN DATEADD(dd, DATEDIFF(dd, 1, ResolutionTimeBusinessHours), '18:00:00')&lt;BR/&gt;          ELSE ResolutionTimeBusinessHours&lt;BR/&gt;         END AS ActualResolutionTime&lt;BR/&gt;  FROM&lt;BR/&gt;   (SELECT SvcCallNo,&lt;BR/&gt;           CASE&lt;BR/&gt;            WHEN DATEPART(hh, CreateTime) &gt;= 18&lt;BR/&gt;            THEN DATEADD(dd, DATEDIFF(dd, -1, CreateTime), '09:00:00')&lt;BR/&gt;            WHEN DATEPART(hh, CreateTime) &lt; 9&lt;BR/&gt;            THEN DATEADD(dd, DATEDIFF(dd, 0, CreateTime), '09:00:00')&lt;BR/&gt;            ELSE CreateTime&lt;BR/&gt;           END AS CreateTimeBusinessHours,&lt;BR/&gt;           CASE&lt;BR/&gt;            WHEN DATEPART(hh, ResolutionTime) &lt; 9&lt;BR/&gt;            THEN DATEADD(dd, DATEDIFF(dd, 1, ResolutionTime), '18:00:00')&lt;BR/&gt;            WHEN DATEPART(hh, ResolutionTime) &gt;= 18&lt;BR/&gt;            THEN DATEADD(dd, DATEDIFF(dd, 0, ResolutionTime), '18:00:00')&lt;BR/&gt;            ELSE ResolutionTime&lt;BR/&gt;           END AS ResolutionTimeBusinessHours&lt;BR/&gt;    FROM   #ServiceCalls) AS d1) AS d2;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/3297687734920990101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/3297687734920990101'/><link rel='alternate' type='text/html' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html?showComment=1192054200000#c3297687734920990101' title=''/><author><name>Hugo Kornelis</name><uri>http://sqlblog.com/blogs/hugo_kornelis/default.aspx</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html' ref='tag:blogger.com,1999:blog-29286778.post-7286957114183628702' source='http://www.blogger.com/feeds/29286778/posts/default/7286957114183628702' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-888963918'/></entry><entry><id>tag:blogger.com,1999:blog-29286778.post-773248244740322498</id><published>2007-10-09T17:38:00.000-04:00</published><updated>2007-10-09T17:38:00.000-04:00</updated><title type='text'>I don't even know why I wasted so much time on thi...</title><content type='html'>I don't even know why I wasted so much time on this, but here goes my code.  It should work if you have it default that first day of the week is  sunday.&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;select svccallNo&lt;BR/&gt;, case when (datepart(dw,createtime) between 2 and 6) and (datepart(HH,createtime) between 9 and 18) then createtime --Normal Days&lt;BR/&gt; when datepart(dw,createtime) = 7 then dateadd(HH,9,dateadd(dd,2,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime)))))--saturday&lt;BR/&gt; when datepart(dw,createtime) = 1 then dateadd(HH,9,dateadd(dd,1,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime)))))--sunday&lt;BR/&gt; when (datepart(dw,createtime) = 6) And (datepart(HH,createtime) &gt; 18) then dateadd(HH,9,dateadd(dd,3,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime)))))--friday night&lt;BR/&gt; when (datepart(dw,createtime) in (2,3,4,5,6)) And (datepart(HH,createtime) &lt; 9 ) then dateadd(HH,9,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime))))--weekday morning&lt;BR/&gt; when (datepart(dw,createtime) in (2,3,4,5)) And (datepart(HH,createtime) &gt; 18 ) then dateadd(HH,9,dateadd(dd,1,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime)))))--weekday night xcept friday&lt;BR/&gt; end as ActualCreateTime&lt;BR/&gt;, case when (datepart(dw,ResolutionTime) between 2 and 6) and (datepart(HH,ResolutionTime) between 9 and 18) then ResolutionTime--normal day&lt;BR/&gt; when datepart(dw,ResolutionTime) = 7 then dateadd(HH,18,dateadd(dd,-1,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime)))))--saturday&lt;BR/&gt; when datepart(dw,ResolutionTime) = 1 then dateadd(HH,18,dateadd(dd,-2,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime)))))--sunday&lt;BR/&gt; when (datepart(dw,ResolutionTime) = 2) And (datepart(HH,ResolutionTime) &lt; 9) then dateadd(HH,18,dateadd(dd,-3,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime)))))--monday morning&lt;BR/&gt; when (datepart(dw,ResolutionTime) in (2,3,4,5,6)) And (datepart(HH,ResolutionTime) &gt; 18 ) then dateadd(HH,18,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime))))--weekday nights&lt;BR/&gt; when (datepart(dw,ResolutionTime) in (3,4,5,6)) And (datepart(HH,ResolutionTime) &lt; 9 ) then dateadd(HH,18,dateadd(dd,-1,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime)))))--weekday morning xcept monday&lt;BR/&gt; end as ActualResolutionTime&lt;BR/&gt;, (floor(datediff(HH,&lt;BR/&gt; case when (datepart(dw,createtime) between 2 and 6) and (datepart(HH,createtime) between 9 and 18) then createtime&lt;BR/&gt; when datepart(dw,createtime) = 7 then dateadd(HH,9,dateadd(dd,2,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime)))))&lt;BR/&gt; when datepart(dw,createtime) = 1 then dateadd(HH,9,dateadd(dd,1,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime)))))&lt;BR/&gt; when (datepart(dw,createtime) = 6) And (datepart(HH,createtime) &gt; 18) then dateadd(HH,9,dateadd(dd,3,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime)))))&lt;BR/&gt; when (datepart(dw,createtime) in (2,3,4,5,6)) And (datepart(HH,createtime) &lt; 9 ) then dateadd(HH,9,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime))))&lt;BR/&gt; when (datepart(dw,createtime) in (2,3,4,5)) And (datepart(HH,createtime) &gt; 18 ) then dateadd(HH,9,dateadd(dd,1,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime)))))&lt;BR/&gt; end,&lt;BR/&gt; case when (datepart(dw,ResolutionTime) between 2 and 6) and (datepart(HH,ResolutionTime) between 9 and 18) then ResolutionTime&lt;BR/&gt; when datepart(dw,ResolutionTime) = 7 then dateadd(HH,18,dateadd(dd,-1,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime)))))&lt;BR/&gt; when datepart(dw,ResolutionTime) = 1 then dateadd(HH,18,dateadd(dd,-2,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime)))))&lt;BR/&gt; when (datepart(dw,ResolutionTime) = 2) And (datepart(HH,ResolutionTime) &lt; 9) then dateadd(HH,18,dateadd(dd,-3,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime)))))&lt;BR/&gt; when (datepart(dw,ResolutionTime) in (2,3,4,5,6)) And (datepart(HH,ResolutionTime) &gt; 18 ) then dateadd(HH,18,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime))))&lt;BR/&gt; when (datepart(dw,ResolutionTime) in (3,4,5,6)) And (datepart(HH,ResolutionTime) &lt; 9 ) then dateadd(HH,18,dateadd(dd,-1,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime)))))&lt;BR/&gt; end&lt;BR/&gt; )/24.0)*9) --regular 9 hour day&lt;BR/&gt;+ (18 - datepart(HH,&lt;BR/&gt;  case when (datepart(dw,createtime) between 2 and 6) and (datepart(HH,createtime) between 9 and 18) then createtime&lt;BR/&gt;  when datepart(dw,createtime) = 7 then dateadd(HH,9,dateadd(dd,2,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime)))))&lt;BR/&gt;  when datepart(dw,createtime) = 1 then dateadd(HH,9,dateadd(dd,1,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime)))))&lt;BR/&gt;  when (datepart(dw,createtime) = 6) And (datepart(HH,createtime) &gt; 18) then dateadd(HH,9,dateadd(dd,3,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime)))))&lt;BR/&gt;  when (datepart(dw,createtime) in (2,3,4,5,6)) And (datepart(HH,createtime) &lt; 9 ) then dateadd(HH,9,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime))))&lt;BR/&gt;  when (datepart(dw,createtime) in (2,3,4,5)) And (datepart(HH,createtime) &gt; 18 ) then dateadd(HH,9,dateadd(dd,1,convert(Datetime, convert(varchar,year(createtime))+ '-'+ convert(varchar,month(createtime)) + '-' + convert(varchar,day(createtime)))))&lt;BR/&gt;  end&lt;BR/&gt; ))--the piece before the end of the day&lt;BR/&gt;+ (datepart(HH,&lt;BR/&gt;  case when (datepart(dw,ResolutionTime) between 2 and 6) and (datepart(HH,ResolutionTime) between 9 and 18) then ResolutionTime&lt;BR/&gt;  when datepart(dw,ResolutionTime) = 7 then dateadd(HH,18,dateadd(dd,-1,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime)))))&lt;BR/&gt;  when datepart(dw,ResolutionTime) = 1 then dateadd(HH,18,dateadd(dd,-2,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime)))))&lt;BR/&gt;  when (datepart(dw,ResolutionTime) = 2) And (datepart(HH,ResolutionTime) &lt; 9) then dateadd(HH,18,dateadd(dd,-3,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime)))))&lt;BR/&gt;  when (datepart(dw,ResolutionTime) in (2,3,4,5,6)) And (datepart(HH,ResolutionTime) &gt; 18 ) then dateadd(HH,18,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime))))&lt;BR/&gt;  when (datepart(dw,ResolutionTime) in (3,4,5,6)) And (datepart(HH,ResolutionTime) &lt; 9 ) then dateadd(HH,18,dateadd(dd,-1,convert(Datetime, convert(varchar,year(ResolutionTime))+ '-'+ convert(varchar,month(ResolutionTime)) + '-' + convert(varchar,day(ResolutionTime)))))&lt;BR/&gt;  end &lt;BR/&gt; ) - 9) --the piece after the start of the day&lt;BR/&gt;as Effort&lt;BR/&gt;from #serviceCalls</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/773248244740322498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29286778/7286957114183628702/comments/default/773248244740322498'/><link rel='alternate' type='text/html' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html?showComment=1191965880000#c773248244740322498' title=''/><author><name>changos</name><uri>http://www.blogger.com/profile/11177982878055080443</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.sqlpointers.com/2007/10/scenario-to-ponder-13.html' ref='tag:blogger.com,1999:blog-29286778.post-7286957114183628702' source='http://www.blogger.com/feeds/29286778/posts/default/7286957114183628702' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-797951622'/></entry></feed>
