PL / SQL Сумма по часам - PullRequest
       18

PL / SQL Сумма по часам

2 голосов
/ 06 мая 2010

У меня есть некоторые данные с начальной и конечной датой, которые мне нужно суммировать. Я не уверен, как его кодировать.

Вот данные, которые я должен использовать:

STARTTIME,            STOPTIME,            EVENTCAPACITY
8/12/2009 1:15:00 PM, 8/12/2009 1:59:59 PM,     100

8/12/2009 2:00:00 PM, 8/12/2009 2:29:59 PM,     100

8/12/2009 2:30:00 PM, 8/12/2009 2:59:59 PM,      80

8/12/2009 3:00:00 PM, 8/12/2009 3:59:59 PM,      85

В этом примере мне понадобится сумма с 13:00 до 14:00, с 14:00 до 15:00 и с 15:00 до 16:00.

Любые предложения приветствуются.

Steve

Ответы [ 3 ]

4 голосов
/ 06 мая 2010

Как насчет чего-то вроде:

SELECT TRUNC(stoptime,'HH'), sum(eventcapacity) 
  FROM yourtable
 GROUP BY TRUNC(stoptime,'HH');
1 голос
/ 06 мая 2010

Вам нужна таблица чисел:

select sum(e.capacity), n.value from eventtable e
left outer join numbers n on n.value between
    extract(hours from e.starttime) and extract(hours from e.stoptime)
where n.value between 0 and 23
group by n.value
order by n.value

Таблица чисел имеет один столбец (значение) и заполнена целочисленными значениями от 0 до 100 (или более), хотя в этом случае вам нужно только от 0 до 23.

create table number (
    value number(4) not null,
    primary key (value)
);
0 голосов
/ 06 мая 2010

Я не уверен в точном синтаксисе PL / SQL, но что-то вроде этого должно сделать это (хотя это довольно странно):

select sum(capacity), case when to_char(starttime, 'HH') between '13' and '14'
                            and to_char(stoptime, 'HH') between '13' and '14'
                            then '1pm-2pm'
                      case when to_char(starttime, 'HH') between '14' and '15'
                            and to_char(stoptime, 'HH') between '14' and '15'
                            then '2pm-3pm'
                      (etc.) 
                      as timeslot
from eventtable
group by timeslot
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...