Условный SQL-запрос для получения последней даты квартала на основе нескольких условий - PullRequest
0 голосов
/ 07 июня 2019

Обычно отчет требуется один раз в квартал, а дата анализа (любая дата) - это последняя дата предыдущего квартала. Так что, если мы загружаем 10 июля, «Дата анализа» будет 30 июня (того же года). ОДНАКО - возможно, что пользователи захотят загрузить данные раньше, чтобы увидеть, что может потребоваться решить к концу квартала. В этом случае они могут захотеть загрузить его 20 июня, а «Дата анализа» все равно будет 30 июня.

Как мне написать запрос для этих двух условий, учитывая, что для этого конкретного ограничения будет только один месяц вперед.

1 Ответ

1 голос
/ 07 июня 2019

Это должно поставить вас на правильный путь. Если у вас версия SQL Server старше 2012 года, вам нужно будет использовать что-то вместо EOMONTH

CREATE FUNCTION dbo.GetAnalysisDate(@date DATE)
RETURNS DATE
AS
BEGIN
    IF MONTH(@date) % 3 = 0 RETURN EOMONTH(@date)
    -- else
    RETURN DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0, @date), 0))
END
GO

-- tests
-- these should return 20181231
SELECT dbo.GetAnalysisDate('20190101')
SELECT dbo.GetAnalysisDate('20190120')
SELECT dbo.GetAnalysisDate('20190220')
-- these should return 20190331
SELECT dbo.GetAnalysisDate('20190320')
SELECT dbo.GetAnalysisDate('20190401')
SELECT dbo.GetAnalysisDate('20190420')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...