Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > выьор строк за каждый час (Oracle 9)


Автор: v0ffka 2.3.2010, 18:53
Доброго времени. Ребята, подскажите плз. начинающему как справиться с sql-запросом. 
Допустим, есть таблица

id     actionDate           amount                             moneytime                          doctype          docid
1         2009-01-09      60.0000              2009-01-09   22:54:05.000000            78              503387
2         2009-01-09      10.0000              2009-01-09   22:59:05.000000            78              503387
3         2009-01-09      39.2000              2009-01-09   09:18:08.000000            78              503387
4         2009-01-09      21.2000              2009-01-09   09:28:08.000000            78              503387
5         2009-01-09      30.6300              2009-01-09   12:38:23.000000            78              503387
6         2009-01-09      194.4600            2009-01-09   14:39:30.000000            78              503387
7         2009-01-09      29.6700              2009-01-09   14:42:56.000000            78              503387
8         2009-01-09      100.0000            2009-01-09   18:16:39.000000            78              503387
9         2009-01-09      54.6600              2009-01-09   18:41:31.000000            78              503387
...........................................................................................................................
Мне необходимо выбрать только те записи, общая сумма ЗА 1 ЧАС  больше 100. Т.е. записи смотрим записи, 1-2 их moneytime попадет в диапазон 1 час, но сумма у них меньше 100.... дальше 3-4, 5 аналогично. а 6-7 попадает по всем критериям и он попадает в выборку (выводить docid), и строки 8-9
Я написал запрос, но получается он выводит записи если он превышен 100,0 НО за целый день, а не группровка по часам

Код

select  this.docid,
this.doctype,
sum(this.amount)
from    tb_data as this
where   this.docid in (221, 593)
and this.actionDate   = '2009-01-09'
group by this.docid, this.doctype
having sum(this.amount) >= 100

Автор: DimW 2.3.2010, 18:57
подсказка:
Код

SQL> 
SQL> select trunc(sysdate) + 1/24
  2        ,1/24 "один час"
  3    from dual
  4  /
 
TRUNC(SYSDATE)+1/24   один час
------------------- ----------
02.03.2010 1:00:00  0,04166666

Автор: DimW 3.3.2010, 10:29
фиговая подсказка, задачу не до конца понял.

Автор: DimW 3.3.2010, 10:46
Код

with test as
(select 10 docid, to_date('10.02.2009 11:01:00', 'dd.mm.yyyy hh24:mi:ss') moneytime, 51 amount from dual union all
 select 10 docid, to_date('10.02.2009 11:25:00', 'dd.mm.yyyy hh24:mi:ss') moneytime, 50 amount from dual union all
 select 10 docid, to_date('10.02.2009 13:01:00', 'dd.mm.yyyy hh24:mi:ss') moneytime, 49 amount from dual union all
 select 10 docid, to_date('10.02.2009 13:25:00', 'dd.mm.yyyy hh24:mi:ss') moneytime, 50 amount from dual)

select docid
      ,sum(amount) amount  
  from test
group by docid, trunc(moneytime, 'hh24') -- округляем до часа, если это требуется конечно...
having sum(amount) >= 100 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)