Я пытался создать 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)
Что такое '** дата **' ??? – Amit
Добавление типов и/или инструкции create table может помочь. – surfmuggle
Что делать, если вы написали функцию, чтобы получить следующую (или предыдущую - если вы выберете среду, вы хотите провести последнюю или следующую пятницу?) В пятницу. Таким образом, предложение 'WHERE' будет выглядеть как' WHERE [date] = fnFriday ('2001-09-24') '. Затем вам нужно будет написать это как функцию, которая приняла 1 ввод даты и использует вашу таблицу dbo.weeks для вывода ближайшей даты, которая также является пятницей. – Tingo