Вот что я получил за первую часть. Вероятно, есть гораздо лучший способ добиться этого. Что я сделал, так это получил текущий месяц и вычел из него один. Затем я соединил дату и текущий год с месяцем. Затем я проверил название дня, чтобы узнать, была ли сегодня суббота. Если да, то я использовал эту дату. В противном случае я сделал на следующий день с той же проверкой и так далее. Если вы хотите использовать это, вам нужно будет добавить к нему дополнительную логику, если вы находитесь в январе. Вы также можете заменить NOW() параметром, который вы используете.
=IIF( WeekdayName(DatePart("w", (CDate((Month(NOW()) - 1) & "/1/" & YEAR(NOW()))))) = "Saturday", (CDate((Month(NOW()) - 1) & "/1/" & YEAR(NOW()))),
(IIF( WeekdayName(DatePart("w", (CDate((Month(NOW()) - 1) & "/2/" & YEAR(NOW()))))) = "Saturday", (CDate((Month(NOW()) - 1) & "/2/" & YEAR(NOW()))),
(IIF( WeekdayName(DatePart("w", (CDate((Month(NOW()) - 1) & "/3/" & YEAR(NOW()))))) = "Saturday", (CDate((Month(NOW()) - 1) & "/3/" & YEAR(NOW()))),
(IIF( WeekdayName(DatePart("w", (CDate((Month(NOW()) - 1) & "/4/" & YEAR(NOW()))))) = "Saturday", (CDate((Month(NOW()) - 1) & "/4/" & YEAR(NOW()))),
(IIF( WeekdayName(DatePart("w", (CDate((Month(NOW()) - 1) & "/5/" & YEAR(NOW()))))) = "Saturday", (CDate((Month(NOW()) - 1) & "/5/" & YEAR(NOW()))),
(IIF( WeekdayName(DatePart("w", (CDate((Month(NOW()) - 1) & "/6/" & YEAR(NOW()))))) = "Saturday", (CDate((Month(NOW()) - 1) & "/6/" & YEAR(NOW()))),
(IIF( WeekdayName(DatePart("w", (CDate((Month(NOW()) - 1) & "/7/" & YEAR(NOW()))))) = "Saturday", (CDate((Month(NOW()) - 1) & "/7/" & YEAR(NOW()))),
"1/1/2010")))))))))))))
С другой стороны, это очень простой способ получить, если у вас есть таблица календаря в SQL Server (особенно когда вам нужна пятница). Вы можете сделать простой оператор выбора, например следующий:
SELECT
MIN(date)
FROM
calendar c
WHERE
MONTH(DATEADD("m", -1, GETDATE())) = MONTH(date)
AND YEAR(DATEADD("m", -1, GETDATE())) = YEAR(date)
AND datename(dw, date) = 'Saturday'
person
Neil
schedule
21.12.2012