2015-07-09 3 views
0

Я использую функцию dataadd, пытаясь найти сумму, в которой определенное поле даты находится в текущем месяце, но в прошлом году.SQL-код для CUrrent Month Последний год

sum(case when (mt04 >= DATEADD(MONTH,-12,getdate()) and (mt04 <= dateadd(month,-11,getdate()))) 
     then 1 else 0 
    end) as [New Instructions Same Month Last Year], 

Это отчет я использую и в данный момент он показывает данные с этого момента до конца месяца. Например. если я запустил его 8-го числа месяца, он будет показывать данные с 8-го числа текущего месяца предыдущего года. Мне нужно общее количество за весь месяц предыдущего года.

ответ

1

Поскольку это находится в sum(), нет никакой возможности поместить все вызовы функций на текущую дату. Таким образом, просто использовать month() и year():

sum(case when year(mt04) = year(getdate()) - 1 and month(mt04) = month(getdate()) 
     then 1 else 0 
    end) as [New Instructions Same Month Last Year] 
+0

* «Потому что это в сумме(), не существует каких-либо преимуществ, чтобы положить все вызовы функций на текущую дату» * - Это не так, я вижу что вы подразумеваете в связи с этим, не влияя на мобильность запроса, однако вы все еще выполняете функции в столбце даты для каждой строки, а не один раз во время компиляции, чтобы получить постоянную дату. В некоторых быстрых тестах, которые я сделал, я нашел, используя функции на дату, а не на 'GETDATE()' примерно на 25% дороже. – GarethD

+0

@ GarethD. , , Это совсем не так. Я ожидал бы времени для загрузки данных с диска, чтобы погрузить вызов двух функций, по крайней мере, на порядок, если не больше. –

+1

В таблице, в которой я провел тест, было около 25 м записей, и сумма последовательно занимала около 2 секунд (в теплом кеше) с использованием 'SUM (CASE WHEN DateColumn> = '20150701' AND DateColumn <'20150801' THEN 1 ELSE 0) 'по сравнению с 2 и половиной секунды с использованием' DATEPART (YEAR, DateColumn) = 2015 И DATEPART (MONTH, DateColumn) = 7' - Я понимаю, что выполнение суммы более 25 миллионов записей может быть не стандартным сценарием, а в меньшем наборе данных разница, вероятно, будет незначительной. – GarethD

Смежные вопросы