Temat: Agregacja danych
Marek Dacz:
No niestety nie działa
ORA-01861: literal does not match format string
ORA-02063: preceding line from KIWI
TS jest w formacie YYYY-MM-DD HH24:MI:SS
To może tak łopatologicznie? (dzień był dłuuugi i ciężki...)
Najpierw tabelka, która zawiera jakieś tam TS:
select systimestamp + rownum/1440 as data from dual
connect by rownum <= 100
Daje nam czas co minutę. Wyniki zapisuję do tabeli test_gl i robię np tak:
select to_date(
substr(
to_char(data,'yyyy-mm-dd hh24:mi')
,1,14)
||
case when to_char(data,'MI') < 15 then '00'
when to_char(data,'MI') < 30 then '15'
when to_char(data,'MI') < 45 then '30'
when to_char(data,'MI') < 60 then '45'
end
, 'yyyy-mm-dd hh24:mi'), count(*)
from test_gl
group by to_date(
substr(
to_char(data,'yyyy-mm-dd hh24:mi')
,1,14)
||
case when to_char(data,'MI') < 15 then '00'
when to_char(data,'MI') < 30 then '15'
when to_char(data,'MI') < 45 then '30'
when to_char(data,'MI') < 60 then '45'
end
, 'yyyy-mm-dd hh24:mi')
... czyli na żywca tnę część daty do minut, a następnie wstawiam zgodnie z logiką case odpowiednią końcówkę i konwertuje znów na datę.
Wyniki:
1 2010-11-18 21:45:00 11
2 2010-11-18 22:00:00 15
3 2010-11-18 22:15:00 15
4 2010-11-18 22:30:00 15
5 2010-11-18 22:45:00 15
6 2010-11-18 23:00:00 15
7 2010-11-18 23:15:00 14
Nie napisałeś co które 15 minut chcesz grupować? Tak żeby otrzymać końcówki 00,15,30,45 (ja tak założyłem)? Czy może 15 minutowe interwały od sysdate? Czy od maksymalnego/minimalnego TS zapisanego w tabeli?
Edit: czy może chcesz zrobić tak jak np opisano tutaj :
http://oracle.ittoolbox.com/groups/technical-functiona...
czyli do najbliższego kwadransa. Np 22:07 zostanie uwzględnione jako 22:00, a 22:08 już jako 22:15
Grzegorz Drzymała edytował(a) ten post dnia 18.11.10 o godzinie 22:23