Log in  ::  Register  ::  Not logged in

 Recent PostsRecent Posts Popular TopicsPopular Topics
 Home Search Members Calendar Who's On

 Calendar Tables III - Changing Business Rules Rate Topic Display Mode Topic Options
Author
 Message
 Posted Wednesday, February 16, 2011 12:01 AM
 SSC Eights! Group: General Forum Members Last Login: Wednesday, September 04, 2013 11:59 PM Points: 958, Visits: 2,876
 Comments posted to this topic are about the item Calendar Tables III - Changing Business Rules
Post #1064742
 Posted Wednesday, February 16, 2011 8:28 AM
 Forum Newbie Group: General Forum Members Last Login: Monday, October 07, 2013 10:15 AM Points: 5, Visits: 47
 Hey!!! I liked the way you worked out the problem. I have a little comment for some of the code. You are using while loops in some of the code that you can replace with pure SQL code.The example is when creating the table with the weeks. The program cycles and inserts data into a table. I thinks this algorithm would help you in two ways. It's faster and easier to read.DECLARE @FromDate DATETIME, @ToDate DATETIMESELECT @FromDate = '20091228', @ToDate = '20111231'-- Number of days between the from and to datesDECLARE @Diff INTSELECT @Diff = DATEDIFF(DAY, @FromDate, @ToDate)SELECT TOP (@Diff / 7 + 1) -- ROW_NUMBER() OVER (ORDER BY C1.OBJECT_ID, C1.COLUMN_ID) - 1) gives us the week number -- First day of week gets calculated with offset 0 DATEADD(DAY, (ROW_NUMBER() OVER (ORDER BY C1.OBJECT_ID, C1.COLUMN_ID) - 1) * 7 + 0, @FromDate) AS DateStart, -- Last day of the week gets calculates with offset 6 DATEADD(DAY, (ROW_NUMBER() OVER (ORDER BY C1.OBJECT_ID, C1.COLUMN_ID) - 1) * 7 + 6, @FromDate) AS DateEndFROM Sys.columns C1, Sys.columns C2As you can see I base it in ROW_NUMBER() function so, it will just run on SQL Server 2005 or above.Regards.Ariel from Argentina.
Post #1065041
 Posted Wednesday, February 16, 2011 10:51 AM
 SSC Eights! Group: General Forum Members Last Login: Wednesday, September 04, 2013 11:59 PM Points: 958, Visits: 2,876
 abacrotto,Thank you for your reply. Yes, the creation of the table could be done set-based, however, it is only done once so I don't pay much attention to performance for just creating the Calendar Table. Also, When I create a Calendar table I usually put more data into it. For example I might add '2010 - Week 1' and so forth as a column for display purposes. For a daily table I might add 'Monday', 'Tuesday', etc., so I can put whatever I want for a day name rather than depend on the DATENAME() function. The while loop makes it easier to add these information only type columns.I hope you find calendar tables useful.Todd Fifield
Post #1065136
 Posted Wednesday, February 16, 2011 1:26 PM
 SSCoach Group: General Forum Members Last Login: Today @ 9:08 AM Points: 19,464, Visits: 13,052
 Thanks for continuing the series. Jason AKA CirqueDeSQLeilI have given a name to my pain...MCM SQL Server 2008SQL RNNRPosting Performance Based Questions - Gail ShawPosting Data Etiquette - Jeff ModenHidden RBAR - Jeff ModenVLFs and the Tran Log - Kimberly Tripp
Post #1065267
 Posted Wednesday, February 16, 2011 2:19 PM
 SSC-Enthusiastic Group: General Forum Members Last Login: Wednesday, November 27, 2013 2:23 PM Points: 177, Visits: 1,471
 Thanks for the clear explanation. It is good to see a clean, simple way to implement a change in business rules without having to change reams of front end code. It shows good planning, and understanding of the business needs, and reminds me about the importance of the design phase of my projects - measure twice, cut once!Cheers, Nicole BowmanNothing is forever.
Post #1065293
 Posted Wednesday, February 16, 2011 10:26 PM
 SSCommitted Group: General Forum Members Last Login: Wednesday, November 06, 2013 2:53 AM Points: 1,711, Visits: 367
 thanks for this post One question - will it be good to add a column instead - say IsWeekEnd, IsWeekStart. Will it fare better or worse than the current query ?Thanks in advance.
Post #1065432
 Posted Thursday, February 17, 2011 2:17 AM
 Valued Member Group: General Forum Members Last Login: Friday, November 15, 2013 4:37 AM Points: 59, Visits: 303
 Todd,Nice article. I also have large calendar tables to deal with - as one of my clients uses a rolling four week cycle starting the first saturday before February the 2nd, so as well as fiscal weeks to deal with I also have week 1-4 four each four week block! I too do not worry about optimising the SQL to populate this, as performance is not a considuration here, accuracy is.Plus how come you get away with one page of forum questions where I have 4+ each time!Look forward to more articles.James JamesMCM [@TheSQLPimp]
Post #1065502
 Posted Thursday, February 17, 2011 12:16 PM
 SSC Eights! Group: General Forum Members Last Login: Wednesday, September 04, 2013 11:59 PM Points: 958, Visits: 2,876
 CirquedeSQLeil (2/16/2011)Thanks for continuing the series.Jason,That means a lot to me coming from you.Todd Fifield
Post #1065915
 Posted Thursday, February 17, 2011 12:18 PM
 SSC Eights! Group: General Forum Members Last Login: Wednesday, September 04, 2013 11:59 PM Points: 958, Visits: 2,876
 Nicole Bowman (2/16/2011)Thanks for the clear explanation. It is good to see a clean, simple way to implement a change in business rules without having to change reams of front end code. It shows good planning, and understanding of the business needs, and reminds me about the importance of the design phase of my projects - measure twice, cut once!Cheers,Nicole,I love that little quote - measure twice, cut once!Glad you enjoyed the article.Todd Fifield
Post #1065918
 Posted Thursday, February 17, 2011 12:20 PM
 SSC Eights! Group: General Forum Members Last Login: Wednesday, September 04, 2013 11:59 PM Points: 958, Visits: 2,876
 ziangij (2/16/2011)thanks for this post One question - will it be good to add a column instead - say IsWeekEnd, IsWeekStart. Will it fare better or worse than the current query ?Thanks in advance.Ziangij,I've tried it both ways. Usually just using the date itself works better and you don't have to add any unnecessary flags to the tables.Todd Fifield
Post #1065920

 Permissions