Solved

Getting a Date and Skipping Weekends

Posted on 2006-11-03
4
1,260 Views
Last Modified: 2012-06-22
This is (from my view) a complex SQL question, but it's also somewhat of a mathematics problem too.

Here's the Setup...
- Table 1 stores Projects
- Table 2 stores Project Tasks

Everything is pretty standard, except I have a certain field in the projects table that allows me to specific the frequency a task needs to be done for the project in days. So, if a certain project has this field set to 3, I want to do a task on that project every 3 days.

Here's my current SQL statement:

SELECT
proj_ID,
proj_title,
proj_days,
MAX(task_completeddate),
MAX(task_completeddate)+proj_days
CAST(GetDate()-(MAX(task_completeddate)+proj_days) AS INT)
FROM
tbl_projects,
tbl_tasks
WHERE proj_ID = task_project
GROUP BY proj_ID, proj_title, proj_days
ORDER BY CAST(GetDate()-(MAX(task_completeddate)+proj_days) AS INT)

Here's what this gives me...

A List of Projects:
A list of projects ordered by the longest time (in days) OVERDUE I am to do a task. This is calculate by subtracting the sum of the date of the most recent task completed for that project and the project days, subtracted from the current date, converted to an integer.

The following Fields:
0 - Project ID
1 - Project Title
2 - Project Task Frequency Days
3 - The Date of the Most Recent Task Completed for That Project
4 - The Date a Task Was Due to Be Completed
5 - The Number of Days Past Due

This system works like a charm. However, I'm wanting a new component and it's way outside my capabilities. Here's the challenge:

Give me all the same information, but the last two columns would reflect the values based on not counting weekend days.

So, if a task was completed on Friday, 10/3 and it's days were set to 3, the next due date would normally be Monday, 10/6. But with the new values, it would show a task due Wednesday, 10/8 because it skips Saturday and Sunday.

Ideally I would like to solve this problem using SQL, but if no one can help me do that I will accept a vbscript that takes an array generated by these results and gives me what I'm looking for.
0
Comment
Question by:cnxmax
  • 3
4 Comments
 
LVL 10

Expert Comment

by:AaronAbend
ID: 17872805
this case statement takes your task_completed date and converts saturday and dates to the following monday
case datepart(dw,task_completeddate) when 1 then dateadd(d,1,task_completeddate) when 7 then dateadd(d,2,task_completeddate)  else task_completeddate end

From your question I was not sure exactly what you want...but this should get you started. Let me know if you have questions.

SELECT
proj_ID,
proj_title,
proj_days,
MAX(task_completeddate),
MAX(case datepart(dw,task_completeddate) when 1 then dateadd(d,1,task_completeddate) when 7 then dateadd(d,2,task_completeddate)  else task_completeddate end  )+proj_days
CAST(GetDate()-(MAX(task_completeddate)+proj_days) AS INT)
FROM
tbl_projects,
tbl_tasks
0
 

Author Comment

by:cnxmax
ID: 17886663
AaronAbend:

Thanks for the tip. The Case/When SQL code is interesting, but I don't know if that will be the solution. The main reason is that I need to be able to bump things up by a day for each weekend day between Today and the Date of the Last Task Completion. This could be multiple weeks with multiple weekend days.

I don't just want everything that should have been done Saturday to be bumped to Monday. Everything should be moved up two days for every weekend.

I found a way to do this with a script that basically loops through all of the results, looping through each day between the last completed date and today, and bumping the due date up by one day for each weekend day it finds.

Anyway, this may be beyond what I can do in a SQL statement...
0
 
LVL 10

Expert Comment

by:AaronAbend
ID: 17886785
I don't think it is beyond SQL at all.  You can compute the number of weekends by dividing the number of days between getdate() (current datetime) and LastTaskCompleted by 7 and checking the remainder against the day of the week (returned by datepart).  A loop can certainly do it though I was trying to avoid it for performance reasons (big hit in most cases).

Want me to post logic or are you all set?
0
 
LVL 10

Accepted Solution

by:
AaronAbend earned 500 total points
ID: 17886791
http://www.experts-exchange.com/Databases/Microsoft_SQL_Server/Q_22049471.html

check out the responses I just got today on this question I asked regarding date logic
0

Featured Post

Simplifying Server Workload Migrations

This use case outlines the migration challenges that organizations face and how the Acronis AnyData Engine supports physical-to-physical (P2P), physical-to-virtual (P2V), virtual to physical (V2P), and cross-virtual (V2V) migration scenarios to address these challenges.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Let's review the features of new SQL Server 2012 (Denali CTP3). It listed as below: PERCENT_RANK(): PERCENT_RANK() function will returns the percentage value of rank of the values among its group. PERCENT_RANK() function value always in be…
Introduction SQL Server Integration Services can read XML files, that’s known by every BI developer.  (If you didn’t, don’t worry, I’m aiming this article at newcomers as well.) But how far can you go?  When does the XML Source component become …
Via a live example, show how to set up a backup for SQL Server using a Maintenance Plan and how to schedule the job into SQL Server Agent.
Via a live example, show how to setup several different housekeeping processes for a SQL Server.

816 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now