Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Суммирование чисел по дням за определенный месяц  [new]
erney
Member

Откуда:
Сообщений: 7
Добрый день

Проблема в том,
что указанный ниже запрос по дням считает сумму пример с 00 часов 23 числа до 00 часов 24 числа следующего(т.е. 24 числа 00 часов не захватывает)
как можно изменить запрос чтоб сумму за день считал с 23 числа 01 часа до 24 числа 00 часов включительно?

SELECT [days], sum([sumflow])from
(SELECT datepart(day, [datetime]) as [DAys],
sum(totalflow) AS SUMFLow
from [tbl_readings]
where i[dtransmitter] = 1 and [datetime] between Convert(datetime, '01.09.2011 00:00:00', 104) and Convert(datetime, '01.10.2011 00:00:00', 104)
group by [datetime]) as t1
group by [days]

Заранее спасибо
13 дек 11, 10:11    [11754461]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование чисел по дням за определенный месяц  [new]
Elena85
Member

Откуда:
Сообщений: 34
erney, например, так:
SELECT [days], sum([sumflow])from 
(SELECT datepart(day, [datetime]) as [DAys],
sum(totalflow) AS SUMFLow
from [tbl_readings]
where i[dtransmitter] = 1 
and [datetime] >= Convert(datetime, '01.09.2011 00:00:00', 104) 
and [datetime] < dateadd(second,1,Convert(datetime, '01.10.2011 00:00:00', 104))
group by [datetime]) as t1 
group by [days]
13 дек 11, 10:17    [11754490]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование чисел по дням за определенный месяц  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
erney
как можно изменить запрос чтоб сумму за день считал с 23 числа 01 часа до 24 числа 00 часов включительно?
11748730

Популярный вопрос. На собеседовании задали?
13 дек 11, 10:18    [11754502]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование чисел по дням за определенный месяц  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
alexeyvg
erney
как можно изменить запрос чтоб сумму за день считал с 23 числа 01 часа до 24 числа 00 часов включительно?
11748730

Популярный вопрос. На собеседовании задали?
Вообще-то, слово "включительно" меняет всё дело!
[datetime] between '20110923 01:00:00.000' and '20110924'
13 дек 11, 11:09    [11754805]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование чисел по дням за определенный месяц  [new]
erney
Member

Откуда:
Сообщений: 7
Ваш пример мне понятен, у меня чуть сложнее. Задача такая нужно чтобы к сумме предыдущего дня прибавлялось сумма за 01:00:00 следующего дня
ПО подробнее есть таблица время и значение
DATETIME___________________________________TOTALFLOW
13.09.2011 1:00:00 1
13.09.2011 2:00:00 2
13.09.2011 3:00:00 3
13.09.2011 4:00:00 4
13.09.2011 5:00:00 5
13.09.2011 6:00:00 6
13.09.2011 7:00:00 7
13.09.2011 8:00:00 8
13.09.2011 9:00:00 9
13.09.2011 10:00:00 10
13.09.2011 11:00:00 11
13.09.2011 12:00:00 12
13.09.2011 13:00:00 13
13.09.2011 14:00:00 14
13.09.2011 15:00:00 15
13.09.2011 16:00:00 16
13.09.2011 17:00:00 17
13.09.2011 18:00:00 18
13.09.2011 19:00:00 19
13.09.2011 20:00:00 20
13.09.2011 21:00:00 21
13.09.2011 22:00:00 22
13.09.2011 23:00:00 23
14.09.2011 0:00:00 24
14.09.2011 1:00:00 1
14.09.2011 2:00:00 2
14.09.2011 3:00:00 3
14.09.2011 4:00:00 4
14.09.2011 5:00:00 5
14.09.2011 6:00:00 6
14.09.2011 7:00:00 7
14.09.2011 8:00:00 8
14.09.2011 9:00:00 9
14.09.2011 10:00:00 10
14.09.2011 11:00:00 11
14.09.2011 12:00:00 12
14.09.2011 13:00:00 13
14.09.2011 14:00:00 14
14.09.2011 15:00:00 15
14.09.2011 16:00:00 16
14.09.2011 17:00:00 17
14.09.2011 18:00:00 18
14.09.2011 19:00:00 19
14.09.2011 20:00:00 20
14.09.2011 21:00:00 21
14.09.2011 22:00:00 22
14.09.2011 23:00:00 23
15.09.2011 0:00:00 24
Привыполнение ниже преставленного запроса
SELECT [day_of_month],
sum([sumflow]) as [Sum_after_day]from
(SELECT datepart(day, [datetime]) as [DAy_of_month],
sum(totalflow) AS SUMFLow
from [tbl_readings]
where [idtransmitter] = 1
and [datetime] > Convert(datetime, '13.09.2011 00:00:00', 104)
and [datetime] <= dateadd(hour,1,Convert(datetime, '15.09.2011 00:00:00', 104))
group by [datetime]) as t1
group by [day_of_month]
получаем

day_of_month sum_after_day
13______________276
14______________498
15______________333

из чего следует что данные за 01:00:00 не добавленны в прошлые сутки
в идеале доджно получится
13_____________498
14_____________609
15_____________
очень надеюсь на помощь
13 дек 11, 11:25    [11754893]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование чисел по дням за определенный месяц  [new]
aleks2
Guest
Дык, внятно разжуй: тебе нужна сумма
" с 23 числа 01:00 часа до 24 числа 00:00"
" с 24 числа 01:00 часа до 25 числа 00:00"
" с 25 числа 01:00 часа до 26 числа 00:00"
дык куда девать пропущенный час?

или те нужна сумма
" с 23 числа 00:00 часа до 24 числа 00:00" + что-то ишо?
" с 24 числа 00:00 часа до 25 числа 00:00" + что-то ишо?
дык какого хрена суммировать что-то дважды?

или те нужна всеж сумма
" с 23 числа 01:00 часа до 24 числа 01:00"
" с 24 числа 01:00 часа до 25 числа 01:00"
" с 25 числа 01:00 часа до 26 числа 01:00"

А то сам не понимаешь чо те нада.
13 дек 11, 12:09    [11755246]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование чисел по дням за определенный месяц  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
aleks2
А то сам не понимаешь чо те нада.
Он понимает, он сказать не может :-)

Очевидно, нужно
[datetime] >= '20110923 01:00:00' and [datetime] < '20110924 01:00:00'
13 дек 11, 14:18    [11756500]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование чисел по дням за определенный месяц  [new]
aleks2
Guest
ПО заветам экстрасенсов
declare @t table ([DATETIME] DATETIME, TOTALFLOW int)

insert @t select '13.09.2011 1:00:00', 1
insert @t select '13.09.2011 2:00:00', 2
insert @t select '13.09.2011 3:00:00', 3
insert @t select '13.09.2011 4:00:00', 4
insert @t select '13.09.2011 5:00:00', 5
insert @t select '13.09.2011 6:00:00', 6
insert @t select '13.09.2011 7:00:00', 7
insert @t select '13.09.2011 8:00:00', 8
insert @t select '13.09.2011 9:00:00', 9
insert @t select '13.09.2011 10:00:00', 10
insert @t select '13.09.2011 11:00:00', 11
insert @t select '13.09.2011 12:00:00', 12
insert @t select '13.09.2011 13:00:00', 13
insert @t select '13.09.2011 14:00:00', 14
insert @t select '13.09.2011 15:00:00', 15
insert @t select '13.09.2011 16:00:00', 16
insert @t select '13.09.2011 17:00:00', 17
insert @t select '13.09.2011 18:00:00', 18
insert @t select '13.09.2011 19:00:00', 19
insert @t select '13.09.2011 20:00:00', 20
insert @t select '13.09.2011 21:00:00', 21
insert @t select '13.09.2011 22:00:00', 22
insert @t select '13.09.2011 23:00:00', 23
insert @t select '14.09.2011 0:00:00', 24
insert @t select '14.09.2011 1:00:00', 1
insert @t select '14.09.2011 2:00:00', 2
insert @t select '14.09.2011 3:00:00', 3
insert @t select '14.09.2011 4:00:00', 4
insert @t select '14.09.2011 5:00:00', 5
insert @t select '14.09.2011 6:00:00', 6
insert @t select '14.09.2011 7:00:00', 7
insert @t select '14.09.2011 8:00:00', 8
insert @t select '14.09.2011 9:00:00', 9
insert @t select '14.09.2011 10:00:00', 10
insert @t select '14.09.2011 11:00:00', 11
insert @t select '14.09.2011 12:00:00', 12
insert @t select '14.09.2011 13:00:00', 13
insert @t select '14.09.2011 14:00:00', 14
insert @t select '14.09.2011 15:00:00', 15
insert @t select '14.09.2011 16:00:00', 16
insert @t select '14.09.2011 17:00:00', 17
insert @t select '14.09.2011 18:00:00', 18
insert @t select '14.09.2011 19:00:00', 19
insert @t select '14.09.2011 20:00:00', 20
insert @t select '14.09.2011 21:00:00', 21
insert @t select '14.09.2011 22:00:00', 22
insert @t select '14.09.2011 23:00:00', 23
insert @t select '15.09.2011 0:00:00', 24

SELECT dateadd(day, 0, DATEDIFF(DAY, 0,[effective_datetime])) [day_of_month], sum([totalflow]) as [Sum_after_day]
from 
(SELECT dateadd(second, -3601, [datetime]) as [effective_datetime], [datetime], totalflow from @t T
  where [datetime] > '20110913 00:00:00' and [datetime] <= dateadd(hour,1,'20110915 00:00:00')
) X
group by DATEDIFF(DAY, 0,[effective_datetime])
13 дек 11, 14:54    [11756898]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование чисел по дням за определенный месяц  [new]
erney
Member

Откуда:
Сообщений: 7
aleks2,

Дык, внятно разжуй: тебе нужна сумма
" с 23 числа 01:00 часа до 24 числа 00:00"
" с 24 числа 01:00 часа до 25 числа 00:00"
" с 25 числа 01:00 часа до 26 числа 00:00"
дык куда девать пропущенный час?

ЧАС НЕ КУДА ДЕВАТЬ НЕ НАДО

информация 01:00 часа это информация за период с 00:00 до 01:00 23 числа и т.д

спасибо за запрос но что ответ за прос меня на пугал уменя таких цыфр не было

ну я уже нашел решение вот оно:

SELECT [DAys], sum([SUMFLow]) as dayflow FROM (SELECT case datepart(hour, [datetime])
when 0 then datepart(day, dateadd(dd,-1,[datetime]))
else datepart(day, [datetime])
end as [DAys],
sum(totalflow) AS SUMFLow
from [tbl_readings]
where [idtransmitter] = 1 and [datetime] between Convert(datetime, '01.09.2011 01:00:00', 104)
and Convert(datetime, '01.10.2011 00:00:00', 104)
group by [datetime]) as t1
group by [days]

alexeyvg,

стибаться не надо просто мысль не довел!!!
Ну за все всем спасибо можно тему закрывать
13 дек 11, 17:13    [11758443]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование чисел по дням за определенный месяц  [new]
aleks2
Guest
erney
ЧАС НЕ КУДА ДЕВАТЬ НЕ НАДО

информация 01:00 часа это информация за период с 00:00 до 01:00 23 числа и т.д

ну я уже нашел решение вот оно:

SELECT [DAys], sum([SUMFLow]) as dayflow FROM (SELECT case datepart(hour, [datetime])
when 0 then datepart(day, dateadd(dd,-1,[datetime]))
else datepart(day, [datetime])
end as [DAys],
sum(totalflow) AS SUMFLow
from [tbl_readings]
where [idtransmitter] = 1 and [datetime] between Convert(datetime, '01.09.2011 01:00:00', 104)
and Convert(datetime, '01.10.2011 00:00:00', 104)
group by [datetime]) as t1
group by [days]

стибаться не надо просто мысль не довел!!!
Ну за все всем спасибо можно тему закрывать


Будем надеяться, что тредстартер считает что-то безобидное, ну расход газа в Северном потоке, например, а не платежи ЖКХ. Хе-хе.
13 дек 11, 17:21    [11758522]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить