Oracle - zapytanie agregujące po zakresie dat
Michał Sienkiewicz - 03-02-2006 09:54
Oracle - zapytanie agregujące po zakresie dat
Witam,
Mam nastepujacą tabelę: TAB_ID (klucz obcy do jakiejs tabeli, kolumna nieunikalna) DATA (kolumna typu data)
W jaki sposób napisać zapytanie, które zwraca mi liczność wystąpień danego tab_id w określonych przedziałach czasu (np co pół godziny), czyli np coś takiego
TAB_ID COUNTER START_DATE 1 10 2005-01-26 14:00:00 1 12 2005-01-26 14:30:00 1 1 2005-01-26 15:00:00 itd.
Docelowo chciałbym utworzyć widok, przy czym można przyjąć założenie że widok zawiera tylko te przedziały dat w których wystąpiły jakieś dane, czyli jeżeli w przedziale półgodzinnym nie było zadnych danych dla danego TAB_ID to zapytanie agregujące nie zwraca żadnych danych.
pozdrawiam, Siano
Michał Sienkiewicz - 03-02-2006 09:54
> Witam, > > Mam nastepujacą tabelę: > TAB_ID (klucz obcy do jakiejs tabeli, kolumna nieunikalna) > DATA (kolumna typu data) > > W jaki sposób napisać zapytanie, które zwraca mi liczność wystąpień danego > tab_id w określonych przedziałach czasu (np co pół godziny), czyli np coś > takiego > > TAB_ID COUNTER START_DATE > 1 10 2005-01-26 14:00:00 > 1 12 2005-01-26 14:30:00 > 1 1 2005-01-26 15:00:00 > itd. > > Docelowo chciałbym utworzyć widok, przy czym można przyjąć założenie że > widok zawiera tylko te przedziały dat w których wystąpiły jakieś dane, > czyli jeżeli w przedziale półgodzinnym nie było zadnych danych dla danego > TAB_ID to zapytanie agregujące nie zwraca żadnych danych. Generalnie problem rozwiązałaby formuła która zaokrągla daną datę w dół do 0 lub 30 minut - wtedy już moge agregować po tych "zaokrąglonych" datach.
Michał Sienkiewicz - 03-02-2006 09:55
> Generalnie problem rozwiązałaby formuła która zaokrągla daną datę w dół do > 0 lub 30 minut - wtedy już moge agregować po tych "zaokrąglonych" datach. Ok, poradziłem sobie: DECODE(TRUNC(vfnc.data, 'HH'), TRUNC(vfnc.data + 1/(24 * 2), 'HH'), TRUNC(vfnc.data, 'HH'), TRUNC(vfnc.data, 'HH') + 1/(24*2))
Może jest jakiś prostszy sposób?
pozdrawiam, Siano
mhm - 04-02-2006 14:52
Michał Sienkiewicz napisał(a): >>Generalnie problem rozwiązałaby formuła która zaokrągla daną datę w dół do >>0 lub 30 minut - wtedy już moge agregować po tych "zaokrąglonych" datach. > > Ok, poradziłem sobie: > DECODE(TRUNC(vfnc.data, 'HH'), > TRUNC(vfnc.data + 1/(24 * 2), 'HH'), > TRUNC(vfnc.data, 'HH'), > TRUNC(vfnc.data, 'HH') + 1/(24*2)) > > Może jest jakiś prostszy sposób?
nie wiem czy prościej, ale może tak?
SELECT tab_id, Count(*) AS counter, To_Char(data,'yyyy-mm-dd hh:') || (CASE WHEN To_Char(data,'MI') < 30 THEN '00' ELSE '30' end) AS start_date FROM tabela group BY tab_id, to_Char(data,'yyyy-mm-dd hh:') || (CASE WHEN To_Char(data,'MI') < 30 THEN '00' ELSE '30' end)
(u mnie dziala na oracle 10) -- mhm.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle 19g +Insert +Insert +Insert...
[Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?=
=?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?=
[oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?=
[oracle 10g] czy =?ISO-8859-2?Q?mo=BFna_wy=B3=B1czy=E6_wszys?==?ISO-8859-2?Q?tkie_wi=EAzy_w_schemacie=3F?=
MSSQL Express czy Oracle Express
=?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?=
=?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
=?iso-8859-2?q?[oracle_10g]_jak_da=E6_grant_do_gv$=2E=2E=2E=2E_=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.platanvarne633.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|