SQL — запрос данных о событиях за текущий квартал

#sql #sql-server-2005

#sql #sql-server-2005

Вопрос:

У меня есть следующая таблица событий календаря курса (для простоты в ней показано всего несколько записей):

 calendarItemID   classID   startDate   startTime   endTime
----------------------------------------------------------
1                1         2011-11-24  7pm         9pm
2                2         2011-11-02  7pm         9pm
3                1         2011-11-25  7pm         9pm 
  

Мне нужен запрос, который возвращает курсы за ПРЕДСТОЯЩИЙ КВАРТАЛ (не за текущий квартал). Существует ли функция SQL, которая может помочь и / или это тот случай, когда нужно вычислить даты в текущем квартале и посмотреть, соответствует ли StartDate этим датам. Я ищу наиболее элегантный способ, если это возможно.

Заранее спасибо! Пол

Ответ №1:

Простой, но медленный подход :

 WHERE DATEPART(qq,startDate) = DATEADD(qq, 1,GETDATE()) AND YEAR(startDate) = 
YEAR(DATEADD(qq, 1,GETDATE()))
  

Под медленным я подразумеваю, что даже если у вас есть индекс (StartDate), он не будет использоваться.

Лучшим решением является получение start_date и end_date для следующего квартала. Я вижу несколько способов сделать это. Например, вы можете создать 2 скалярных UDF, которые возвращают start_date и end_date соответственно. Вы также можете создать 1 табличную функцию, которая возвращает 1 строку с 2 столбцами, а затем объединить ее. Наконец, вы можете просто создать справочную таблицу и вручную ввести дату начала / окончания на следующие пару лет.

Комментарии:

1. Круто, я использовал опцию UDF, возвращающую даты начала и окончания, остальное было просто. Приветствия!

Ответ №2:

Создайте таблицу с именем, скажем, Quarters, с полезным идентификатором, скажем, YYYYQQ, и датой начала и окончания, затем это простое объединение.