Solved

How to call this function

Posted on 2013-01-22
7
375 Views
Last Modified: 2013-01-22
I want to calculate 72 hours elapsed time but exclude the weekends. I found this function

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=61519&SearchTerms=F_TABLE_DATE.

I can call it directly like this:
 SELECT * FROM   F_TABLE_DATE('2012-12-07 10:55:25.220', GETDATE()) d
    WHERE
  d.[DAY_OF_WEEK] BETWEEN 2 AND 6

Open in new window


But not sure how to call it. This is my sql but doesnt work

SELECT *
 FROM dbo.NonMemberProvider
 WHERE officecalled IS NULL
 AND DATEDIFF(hour, UPDATEDate, GETDATE()) > 72	
 AND  ( SELECT * FROM F_TABLE_DATE(UPDATEDate, GETDATE()) 
        WHERE
  d.[DAY_OF_WEEK] BETWEEN 2 AND 6 )

Open in new window

0
Comment
Question by:Camillia
  • 4
  • 2
7 Comments
 
LVL 33

Accepted Solution

by:
knightEknight earned 500 total points
ID: 38807422
-- here's something to try along the same line of thinking:

SELECT *
 FROM dbo.NonMemberProvider
 WHERE officecalled IS NULL
 AND DATEDIFF(hour, UPDATEDate, GETDATE()) > 72      
 AND  DATEPART( WEEKDAY, UPDATEDate ) between 2 and 6
0
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 38807424
it think you want to "CROSS APPLY" that table function:
SELECT t.*
 FROM dbo.NonMemberProvider t
  CROSS APPLY F_TABLE_DATE(t.UPDATEDate, GETDATE())  f
 WHERE t.officecalled IS NULL
 AND DATEDIFF(hour, t.UPDATEDate, GETDATE()) > 72	
 AND f.[DAY_OF_WEEK] BETWEEN 2 AND 6  

Open in new window

0
 
LVL 7

Author Comment

by:Camillia
ID: 38807468
Seems like knight is correct. Cross Apply one gives me repeated rows.
Anyway to exclude holidays?
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 33

Expert Comment

by:knightEknight
ID: 38807517
Not unless you have a specific holiday or set of holidays in mind.  Certain holidays fall on different dates each year (for example, first Monday of the month), whereas others are always on the same day, in which case:

SELECT *
 FROM dbo.NonMemberProvider
 WHERE officecalled IS NULL
 AND DATEDIFF(hour, UPDATEDate, GETDATE()) > 72      
 AND  DATEPART( WEEKDAY, UPDATEDate ) between 2 and 6
AND NOT ( DATEPART(month,UPDATEDate)=12 and DATEPART(day,UPDATEDate)=25 )  -- excludes December 25
0
 
LVL 7

Author Comment

by:Camillia
ID: 38807539
Should I create a Holiday table and join to that?
0
 
LVL 33

Expert Comment

by:knightEknight
ID: 38807556
Yes, that could work... then you could excludes dates in that table:

SELECT *
 FROM dbo.NonMemberProvider T
 WHERE officecalled IS NULL
 AND DATEDIFF(hour, UPDATEDate, GETDATE()) > 72      
 AND  DATEPART( WEEKDAY, UPDATEDate ) between 2 and 6
 and UPDATEDate not in ( select holdate from HolidayTable )
0
 
LVL 33

Expert Comment

by:knightEknight
ID: 38807562
actually, my last post assumes UPDATEDate is a date type(as opposed to a datetime).  If it is a datetime then you could cast it like this, but doing this will slow down your query considerably:

and cast(UPDATEDate as DATE) not in ( select holdate from HolidayTable )
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

Introduction: When running hybrid database environments, you often need to query some data from a remote db of any type, while being connected to your MS SQL Server database. Problems start when you try to combine that with some "user input" pass…
Hi all, It is important and often overlooked to understand “Database properties”. Often we see questions about "log files" or "where is the database" and one of the easiest ways to get general information about your database is to use “Database p…
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …

777 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