четверг, 20 сентября 2012 г.

SQL: Previous Month and Week

Получаем записи за предыдущаю неделю (от понедельника до полуночи с воскресенье на понедельник):

DECLARE @TodayDayOfWeek INT
DECLARE @EndOfPrevWeek DateTime
DECLARE @StartOfPrevWeek DateTime

SET @TodayDayOfWeek = datepart(dw, GetDate())
SET @EndOfPrevWeek = DATEADD(dd, -@TodayDayOfWeek, GetDate())
SET @StartOfPrevWeek = DATEADD(dd, -(@TodayDayOfWeek+6), GetDate())

SELECT 
--- Тут выборка
WHERE
    CREATED_DATE BETWEEN 
 CONVERT(DATE, @StartOfPrevWeek,7)
AND
 CONVERT(DATE, @EndOfPrevWeek+2,7)
GROUP BY
 p.PRODUCT_NAME 

Если воскресенье учитывать не надо – вместо @EndOfPrevWeek + 2 надо писать @EndOfPrevWeek + 1.

Сделать выборку по месяцу намного проще:

DECLARE @EndOfPeriod DateTime
DECLARE @StartOfPriod DateTime

SET @StartOfPriod = DATEADD(mm, DATEDIFF(mm,0,getdate())-1, 0)
SET @EndOfPeriod = DATEADD(mm, 1, @StartOfPriod)

SELECT
---- тут выборка
WHERE
 CREATED_DATE BETWEEN
 CONVERT(DATE, @StartOfPriod,7)
AND
 CONVERT(DATE, @EndOfPeriod,7)

Аналогичные штуки проходят с днём и годом.

Работает в т.ч. в MS SQL 2005 (если MSDN не врёт).

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

Отправить комментарий