On Mon, Nov 14, 2011 at 4:29 PM, Amit Dor-Shifer
<amit.dor.shi...@gmail.com>wrote:

> Hi,
> I've got this table:
> create table phone_calls
> (
>     start_time timestamp,
>     device_id integer,
>     term_status integer
> );
>
> It describes phone call events. A 'term_status' is a sort-of an exit
> status for the call, whereby a value != 0 indicates some sort of error.
> Given that, I wish to retrieve data on devices with a persisting error on
> them, of a specific type. I.E. that their last term_status was, say 2. I'd
> like to employ some hysteresis on the query: only consider a device as
> errorring if:
> 1. the last "good" (0) term_status pre-dates a "bad" (2) term_status.
> 2. it has at least N "bad" term_status events following the last "good"
> one.
> 3. The time span between the first "bad" term_status event and the last
> one is >= T minutes
>
> For instance, w/the following data set:
>
> INSERT INTO phone_calls(start_time, device_id, term_status) VALUES (now()
> - interval '10 minutes', 1, 2, 0);
> INSERT INTO phone_calls(start_time, device_id, term_status) VALUES (now()
> - interval '9 minutes', 1, 2, 1);
> INSERT INTO phone_calls(start_time, device_id, term_status) VALUES (now()
> - interval '7 minutes', 1, 2, 1);
> INSERT INTO phone_calls(start_time, device_id, term_status) VALUES (now()
> - interval '6 minutes', 1, 2, 1);
> INSERT INTO phone_calls(start_time, device_id, term_status) VALUES (now()
> - interval '5 minutes', 1, 2, 0);
> INSERT INTO phone_calls(start_time, device_id, term_status) VALUES (now()
> - interval '4 minutes', 1, 2, 2);
> INSERT INTO phone_calls(start_time, device_id, term_status)VALUES (now() -
> interval '3 minutes', 1, 2, 2);
> INSERT INTO phone_calls(start_time, device_id, term_status)VALUES (now() -
> interval '2 minutes', 1, 2, 2);
>
> with N=3, T=3
> The query should return device_id 2 as errorring, as it registered 3 "bad"
> events for at least 3 minutes.
>
> I assume some partitioning needs to be employed here, but am not very
> sure-footed on the subject.
>
> Would appreciate some guidance.
> 10x,
>

... fixed data set:

INSERT INTO phone_calls(start_time, device_id, term_status) VALUES (now() -
interval '10 minutes', 2, 0);
INSERT INTO phone_calls(start_time, device_id, term_status) VALUES (now() -
interval '9 minutes', 2, 1);
INSERT INTO phone_calls(start_time, device_id, term_status) VALUES (now() -
interval '7 minutes', 2, 1);
INSERT INTO phone_calls(start_time, device_id, term_status) VALUES (now() -
interval '6 minutes', 2, 1);
INSERT INTO phone_calls(start_time, device_id, term_status) VALUES (now() -
interval '5 minutes', 2, 0);
INSERT INTO phone_calls(start_time, device_id, term_status) VALUES (now() -
interval '4 minutes', 2, 2);
INSERT INTO phone_calls(start_time, device_id, term_status)VALUES (now() -
interval '3 minutes', 2, 2);
INSERT INTO phone_calls(start_time, device_id, term_status)VALUES (now() -
interval '2 minutes', 2, 2);

Reply via email to