В настоящее время я работаю над заданием SQL с функцией sum, которая суммирует некоторые значения цены в течение дня. Я смог успешно реализовать эту функцию, но в настоящее время есть проблемы с полуночными значениями.Значения Midnight, не включенные в SUM (MS SQL)
Таблица макет:
Hour | price | sum function
------------------------------------
'2014-07-07 06:00:00' | 0 | NULL
'2014-07-07 07:00:00' | 0 | NULL
'2014-07-07 08:00:00' | 1000 | NULL
'2014-07-07 09:00:00' | 1200 | NULL
'2014-07-07 10:00:00' | 1300 | NULL
'2014-07-07 11:00:00' | 700 | NULL
'2014-07-07 12:00:00' | 800 | NULL
'2014-07-07 13:00:00' | 2000 | 5000
'2014-07-07 14:00:00' | 3500 | NULL
'2014-07-07 15:00:00' | 2500 | NULL
'2014-07-07 16:00:00' | 1000 | 13000
'2014-07-07 17:00:00' | 500 | NULL
Задача:
Проблема существует, когда час, из приведенных выше таблиц, встречает полночь. Дело в 01 часах (в предыдущий день). Меня интересует наличие суммы предыдущего дня с 06-00 часов таким же образом, как показано в таблице выше в течение дня. Моя текущая сумма работает хорошо с 06-23, но возвращает 0, если диапазон 06-00. Я пытаюсь много вариантов, но просто не могу заставить его работать. Я надеялся, что можно определить недельность в моей функции.
Код Так что я начать с вызова этого метода внутри отборное:
Case When DATEPART(HOUR,t.Hour) = 1 THEN a.sumfunction ELSE NULL END as sumfunction
Функция это сам выглядит следующим образом:
OUTER APPLY ( SELECT SUM(CASE WHEN DATEPART(HOUR, t2.Hour) BETWEEN 6 AND 23 THEN abs(t2.Price) ELSE 0 END) sumfunction FROM dbo.Values t2 where t2.Hour >= dateadd(hh,5,t.Hour - 1) AND t2.Hour <= dateadd(hh,-1,t.Hour) )a
Заявление BETWEEN 6 AND 23
дает правильную сумму с 06 до 23 часов, но изменение этого на интервал BETWEEN 6 AND 0
вернет 0. Я много работал с WHERE
, но не может заставить эту работу работать.
Надеюсь, у вас есть идеи.
Спасибо!
(MS SQL 2008)
Вы можете добавить другое условие ИЛИ DATEPART (...) = 0 –