2015-07-01 3 views
1

Я пытался создать SQL для вывода данных на основе даты, теперь имея troble для использования where clause, чтобы получить то, что мне действительно нужно У меня есть следующую таблицу и ТВФ:SQL Server - где + TVF/SVF, cross-apply, T-SQL

/* dbo.weeks -> column(weeknum), column(date) **date is all Fridays** */ 
weeknum date 
    1  2001-09-21 
    2  2001-09-28 
    3  2001-10-05 
...  .... 
/* fnBenchMark(@weeknum) -> display benchmark data based on weeknum */ 

Вот мой код:

SELECT p.weeknum, p.date, q.companyid, q.index 
FROM dbo.Weeks AS p 
cross apply 
dbo.fnBenchmark(p.weeknum) as q 
where date = '2001-09-21' 

/* Here is what I wish to add to above code but don't know how to do it */ 

if  
    date in dbo.Weeks column (date) --if date on where clause is a Friday and it is on dbo.weeks table 
then run above code  
else 
    change date to LastFridayDate --if date on where clause is Sat~Thur, then use previous Friday's date 
then run above 

к примеру, скажем, 2001-09-21 в пятницу, если я вхожу 2001-09-24 на где , я хочу, чтобы SQL запускал «where date =» 2001-09-2 1 «с 2001-09-24 Я вступил не в пятницу»

Возможно, мне нужно создать еще одну функцию (SVF?), Чтобы вернуть дату предыдущей пятницы на основе введенного параметра @date? а затем использовать:

where date = fnFridayCheck(@date I entered) 
+0

Что такое '** дата **' ??? – Amit

+0

Добавление типов и/или инструкции create table может помочь. – surfmuggle

+0

Что делать, если вы написали функцию, чтобы получить следующую (или предыдущую - если вы выберете среду, вы хотите провести последнюю или следующую пятницу?) В пятницу. Таким образом, предложение 'WHERE' будет выглядеть как' WHERE [date] = fnFriday ('2001-09-24') '. Затем вам нужно будет написать это как функцию, которая приняла 1 ввод даты и использует вашу таблицу dbo.weeks для вывода ближайшей даты, которая также является пятницей. – Tingo

ответ

0

mayby ​​вы могли бы использовать

datepart(dw,getdate()) 

и не только StoredProcedure или просто запрос, например

IF datepart(dw,getdate()) = 6 
BEGIN 
    something if it's a friday (because 6 in dateprart points to firday) 
END 
ELSE 
BEGIN 
    something else to do 
END