[psql]zdarzenia w czasie
Jackoski - 23-10-2005 18:54
[psql]zdarzenia w czasie
Witam Mam problem z wyciągniecięm odpowiednich danych. ALe zaczne od poczatku. Mam tabele create table zadania ( zdarzenie_id int4 not null, kiedy timestamp not null ...... );
Do tego zadaje jakis przedział czasowy np 5 min. Jeśli w tym przedziale czasowym wystapi więcej niż jedo zdarzenie o takiej samej wartości zdarzenie_id to ma być zliczona pojedyńczo jesli zdarzenia powtarzają sie zadziej niz dany przedział czasowy to powinny być zliczane normalnie.
Czyli jesli mamy takie dane: zdarzenie_id kiedy 1 2005-01-01 0:01:01 2 2005-01-01 0:01:02 1 2005-01-01 0:03:01 2 2005-01-01 1:01:01 3 2005-01-01 1:01:11
to w wyniku musze otrzymać coś takiego : zdarzenie_id ilosc 1 1 2 2 3 1
Jednak jeśli zadamy przedział czasoy np 2 godziny to wynik powinien wyglądać tak: zdarzenie_id ilosc 1 1 2 1 3 1
Czy da sie w taki sposób wyciągać dane z postgresa w zapytaniu sql'owym
Pozdrawiam J.Jackowski
Paweł Matejski - 23-10-2005 18:54
Jackoski wrote: > Witam > Mam problem z wyciągniecięm odpowiednich danych. ALe zaczne od poczatku. > Mam tabele > create table zadania > ( > zdarzenie_id int4 not null, > kiedy timestamp not null > ...... > ); > > Do tego zadaje jakis przedział czasowy np 5 min. Jeśli w tym przedziale > czasowym wystapi więcej niż jedo zdarzenie o takiej samej wartości > zdarzenie_id to ma być zliczona pojedyńczo jesli zdarzenia powtarzają > sie zadziej niz dany przedział czasowy to powinny być zliczane normalnie.
> Czy da sie w taki sposób wyciągać dane z postgresa w zapytaniu sql'owym
W SQL raczej nie, chyba, że masz tabele z przedziałami. Ale w Twoim wypadku najlepiej generować je przy pomocy funkcji zwracającej zbiór, jesli przedział czasowy od min(kiedy) do max(kiedy) nie jest duży, albo funkcją zwracająco przedział do którego pasuje "kiedy" w przeciwnym wypadku.
-- P.M.
Grzegorz Szyszlo - 23-10-2005 18:54
Jackoski napisał(a): > Witam > Mam problem z wyciągniecięm odpowiednich danych. ALe zaczne od poczatku. > Mam tabele > create table zadania > ( > zdarzenie_id int4 not null, > kiedy timestamp not null > ...... > ); > > Do tego zadaje jakis przedział czasowy np 5 min. Jeśli w tym przedziale > czasowym wystapi więcej niż jedo zdarzenie o takiej samej wartości > zdarzenie_id to ma być zliczona pojedyńczo jesli zdarzenia powtarzają > sie zadziej niz dany przedział czasowy to powinny być zliczane normalnie. > > Czyli jesli mamy takie dane: > zdarzenie_id kiedy > 1 2005-01-01 0:01:01 > 2 2005-01-01 0:01:02 > 1 2005-01-01 0:03:01 > 2 2005-01-01 1:01:01 > 3 2005-01-01 1:01:11 > > to w wyniku musze otrzymać coś takiego : > zdarzenie_id ilosc > 1 1 > 2 2 > 3 1 > > Jednak jeśli zadamy przedział czasoy np 2 godziny to wynik powinien > wyglądać tak: > zdarzenie_id ilosc > 1 1 > 2 1 > 3 1
a nie da sie zrobić zdarzenie_id,count(zdarzenie_id) ..... group by zdarzenie_id ?
nie jestem pewien, ale count(blablabla) można też przejechać jakąś funkcją. tutaj pewnie będzie dzielenie całkowite ilości zdarzeń przez przedział standardowy (5 min), z korektami aby uzyskać założone rezultaty. pewnie to będzie (4 + count(zdarzenie_id) / podany_przedział ^^^ dzielenie całkowite. nie pamiętam operatora :)
btw. jak count nie zechce współpracować, to z tego selecta zrób widok zostawiając bezpośrednio count(costam), a obliczenia wykonak w select, ktory do tego widoku sie odwola. ot takie male oszukanstwo :)
znik.
standardowy.
Marcin Mańk - 23-10-2005 18:54
"Jackoski" <news@egory.info> wrote in message news:dj8vco$rcg$1@atlantis.news.tpi.pl...
czy chodzi o to:
select zdarzenie_id,count(*) from zadania Z1 where not exists( select * from zadania Z2 where Z2.zdarzenie_id=Z1.zdarzenie_id and Z2.kiedy>Z1.kiedy and Z2.kiedy<Z1.kiedy+'2 hour'::interval )
?
Pozdrawiam Marcin Mańk
Filip Sielimowicz - 23-10-2005 18:54
Użytkownik "Marcin Mańk" <mank@phonesat.pl.spammerom.nie> napisał w wiadomości news:djak4a$n56$1@ricewind.phonesat.pl... > > "Jackoski" <news@egory.info> wrote in message > news:dj8vco$rcg$1@atlantis.news.tpi.pl... > > czy chodzi o to: > > select zdarzenie_id,count(*) > from zadania Z1 > where not exists( > select * from zadania Z2 > where Z2.zdarzenie_id=Z1.zdarzenie_id > and Z2.kiedy>Z1.kiedy > and Z2.kiedy<Z1.kiedy+'2 hour'::interval > ) > > ?
Niezłe ;)
A co jeśli ...
1 2005-01-01 0:01:01 2 2005-01-01 0:01:01 1 2005-01-01 0:01:01 2 2005-01-01 0:01:01 3 2005-01-01 0:01:01
:)
Marcin Mańk - 24-10-2005 11:04
> A co jeśli ... > > 1 2005-01-01 0:01:01 > 2 2005-01-01 0:01:01 > 1 2005-01-01 0:01:01 > 2 2005-01-01 0:01:01 > 3 2005-01-01 0:01:01 >
Tia. Twój przypadek jest jeszcze do ominięcia( count(distinct kiedy) zamiast count(*) ), ale:
1 2005-01-01 01:00:00 1 2005-01-01 02:00:00 1 2005-01-01 03:00:00 1 2005-01-01 04:00:00 1 2005-01-01 05:00:00 1 2005-01-01 06:00:00 1 2005-01-01 07:00:00 1 2005-01-01 08:00:00 1 2005-01-01 09:00:00
pokazuje głębszy problem z tym zapytaniem, bo zwraca 1 - czy tak ma być według pytającego?
Pozdrawiam Marcin Mańk
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
=?ISO-8859-2?Q?[psql]_Polskie_t=B3umaczenie_?= =?ISO-8859-2?Q?licencji_BSD_dla_PostgreSQL=3F?=
[psql] Funkcja =?ISO-8859-2?Q?=B3=B1cz=B1ca_stringi?=
[psql] =?ISO-8859-2?Q?Ilo=B6=E6_godzin_w_intervale?=
[psql] Jak odczytać pg_index.indexprs w postaci nodeToString()?
PSQL - przepisac z jednej bazy do drugiej wybrane rek
[psql] Sprawdzenie jakie query sa obecnie wykonywane
psql zmiana pozycji kolumny w tabeli
[psql] Konfiguracja serwera i pg_restore
[psql] problem z UPDATE'm dla nast. sytuacji
[psql] problem z vacuum full analyze
zanotowane.pldoc.pisz.plpdf.pisz.pllunadance.htw.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 |
|