#tsql #sql-server-2017
#tsql #sql-сервер-2017
Вопрос:
Я пытаюсь рассчитать оценку частоты в SQL Server, и я использую следующие запросы для получения результатов,
FORMAT(DATEADD(month,-66, DATEADD(dd, 0,DATEADD(qq, DATEDIFF(qq, 0, getdate()), 0))), 'd','us') --For -5.5 years Frequency
FORMAT(DATEADD(month,-6, DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0, DATA_ASOF_TSTMP), 0))), 'd','us') --For -6 Months Frequency
Я получил следующие результаты
5.5_Years_Frequency 6_Months_Frequency
4/1/2015 3/30/2020
Для частоты -6 месяцев я получил конечную дату как 3/30/2020, но в марте 31 день, поэтому я хочу, чтобы результат был 3/31/2020 вместо 3/30/2020, как показано ниже.
Ожидаемые результаты,
5.5_Years_Frequency 6_Months_Frequency
4/1/2015 3/31/2020
Может ли кто-нибудь, пожалуйста, помочь мне получить ожидаемые результаты?
Комментарии:
1. Ваш вопрос неясен. Не могли бы вы описать попытку вычисления словами, пожалуйста? Равна ли «6-месячная частота» «получить дату окончания квартала, которая наступает за 3 квартала до текущего квартала»?
2. Да, вы правы. Но когда я вычислил -6 месяцев с текущего квартала, я получаю конечную дату как 3/30/2020, но в марте 31 день, и я должен получить 3/31/2020 вместо 3/30/2020.
3. Добавлен ответ для 6-месячной частоты, но ваш текущий и ожидаемый результат для «5,5-летней частоты» совпадает с вашим вопросом? А 1 апреля — это дата начала квартала, поэтому она не соответствует определению 6-месячной частоты (которая дает конечную дату ).
4. Да, но для частоты 5,5 лет мне не нужна дата окончания квартала, это должен быть день начала следующего квартала, и именно так бизнес попросил нас создать логику.
5. Хорошо, тогда вы можете просто удалить
dateadd(dd, 0,
из расчета 😉
Ответ №1:
Измените порядок расчета:
- Определите квартал
- Вычтите 6 месяцев
- Вычтите 1 день
Периодичность в течение 6 месяцев:
select FORMAT(DATEADD(dd, -1, DATEADD(month,-6, DATEADD(qq, DATEDIFF(qq, 0, getdate()), 0))), 'd','us');