Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1aOwap-0006mM-17 for pgsql-sql@arkaria.postgresql.org; Fri, 29 Jan 2016 00:07:15 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1aOwao-0007Ug-Eb for pgsql-sql@arkaria.postgresql.org; Fri, 29 Jan 2016 00:07:14 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1aOwZk-0006LF-Ed for pgsql-sql@postgresql.org; Fri, 29 Jan 2016 00:06:08 +0000 Received: from post.visena.com ([46.226.10.50]) by makus.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1aOwZc-0002gU-Li for pgsql-sql@postgresql.org; Fri, 29 Jan 2016 00:06:07 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=visena.com; s=20141101.wh; h=Content-Type:MIME-Version:Subject:Message-ID:To:From:Date; bh=c2p6+vFeABwok05IM9VNgz9x2EcfRsX1XTedwtf5Wm4=; b=qVve6Dph3ZcFCNEMtpNnlnu9/tThv3qGxlyYQvfGYqwVF1lu6HR4V8AR1C076YmtrCQa4lHRuopH0ZZIb4b7PookOiWjegO27F+Von9pTlF5N/CLXrsLLtHPzgLHpwmiDT56qELgmwe1P2YL2HTbTvIdam9CZWKw7gSuAGF294c=; Received: from [10.0.1.10] (helo=tc7-visena.wh.internal.visena.com) by post.visena.com with esmtp (Exim 4.82) (envelope-from ) id 1aOwZW-0002Lj-Ox for pgsql-sql@postgresql.org; Fri, 29 Jan 2016 01:05:56 +0100 Received: from localhost ([127.0.0.1] helo=tc7-visena.wh.internal.visena.com) by tc7-visena.wh.internal.visena.com with esmtp (Exim 4.82) (envelope-from ) id 1aOwZW-0001g5-NF for pgsql-sql@postgresql.org; Fri, 29 Jan 2016 01:05:54 +0100 Date: Fri, 29 Jan 2016 01:05:54 +0100 (CET) From: Andreas Joseph Krogh To: pgsql-sql@postgresql.org Message-ID: Subject: GROUP BY overlapping (tsrange) entries MIME-Version: 1.0 X-Mailer: Visena Mail 2.0.0-SNAPSHOT X-Spam-Score: -1.0 X-Spam-Report: SpamAssasin (score=-1.0, required 5.0 ALL_TRUSTED=-1, HTML_MESSAGE=0.001) X-Pg-Spam-Score: -2.0 (--) Content-Type: multipart/related; boundary="----=_Part_41_10210113.1454025954647" List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-sql Precedence: bulk Sender: pgsql-sql-owner@postgresql.org ------=_Part_40_575755565.1454025954647 Content-Type: multipart/related; boundary="----=_Part_41_10210113.1454025954647" ------=_Part_41_10210113.1454025954647 Content-Type: multipart/alternative; boundary="----=_Part_42_463236998.1454025954664" ------=_Part_42_463236998.1454025954664 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi all. =C2=A0 I'm trying to count() overlapping entries (timestamp-ranges, tsrange) and h= ave=20 the following test-data: =C2=A0 create table event( id SERIAL PRIMARY KEY, start_time timestamp NOT NULL,= =20 end_timeTIMESTAMP, tsrange TSRANGE NOT NULL ); CREATE INDEX event_range_idx= ON=20 event USING gist(tsrange); -- Populate tsrange in this trigger CREATE OR=20 REPLACE FUNCTIONevent_update_tf() returns TRIGGER AS $$ BEGIN if NEW.end_t= ime=20 IS NOT NULL then NEW.tsrange =3D tsrange(NEW.start_time, NEW.end_time, '[]'= ); =20 else NEW.tsrange =3D tsrange(NEW.start_time, null, '[)'); end if; RETURN = NEW;=20 END;$$ LANGUAGE plpgsql; CREATE TRIGGER event_update_t BEFORE INSERT OR UPD= ATE=20 ON eventFOR EACH ROW EXECUTE PROCEDURE event_update_tf(); insert into event (start_time, end_time)values('2015-12-20', NULL) , ('2015-12-20', '2015-12-= 31')=20 , ('2015-12-25', '2016-01-01') , ('2015-11-20', '2015-11-24') , ('2016-02-0= 1',=20 '2016-02-03') , ('2016-02-01', '2016-02-04') , ('2016-02-01', NULL) ; What = I'd=20 like is output like this: =C2=A0count =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =C2=A0=C2=A0=C2=A0=C2=A0 1 =C2=A0=C2=A0=C2=A0=C2=A0 3 =C2=A0=C2=A0=C2=A0=C2=A0 3 (3 rows) =C2=A0 Something like: SELECT count(*) FROM event group by (tsrange with &&); =C2=A0 PS: In my real query the tsrange and other data is the result of a query=20 involving multile tables, this is just a simplified example to deal with th= e=20 "group by tsquery" =C2=A0 Thanks. =C2=A0 -- Andreas Joseph Krogh CTO / Partner - Visena AS Mobile: +47 909 56 963 andreas@visena.com www.visena.com ------=_Part_42_463236998.1454025954664 Content-Type: text/html;charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi all.
=C2=A0
I'm trying to count() overlapping entries (timestamp-ranges, tsrange) = and have the following test-data:
=C2=A0
create table event(
    id SERIAL PRI=
MARY KEY,
    start_time ti=
mestamp NOT NULL,
    end_time TIME=
STAMP,
    tsrange TSRAN=
GE NOT NULL
);

CREATE INDEX event_range_idx tsrange);

-- Populate tsrange in this trigger
CREATE OR REPLACE=
 FUNCTION event_update_tf() returns TRIGGER AS $$
BEGIN
    if NEW=
.end_time IS NOT NULL then
        NE=
W.tsrange =3D tsrange(NEW.start_time, NEW.end_time, '[]');
    else
        NE=
W.tsrange =3D tsrange(NEW.start_time, null, '[)');
    end if=
;
    RETURN=
 NEW;
END;
$$ =
LANGUAGE p=
lpgsql;

CREATE TRIGGER event_update_t BEFORE INSERT OR UPDATE ON event
FOR EACH R=
OW EXECUTE PROCEDURE event_update_tf();

insert into event=
(start_time, end_time)
    values=
('2015-12-20', NULL)
    , ('2015-12-2=
0', '2015-=
12-31')
    , ('2015-12-2=
5', '2016-=
01-01')
    , ('2015-11-2=
0', '2015-=
11-24')
    , ('2016-02-0=
1', '2016-=
02-03')
    , ('2016-02-0=
1', '2016-=
02-04')
    , ('2016-02-0=
1', NULL)
;

What I'd like is output like this:

=C2=A0count
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80
=C2=A0=C2=A0=C2=A0=C2=A0 1
=C2=A0=C2=A0=C2=A0=C2=A0 3
=C2=A0=C2=A0=C2=A0=C2=A0 3
(3 rows)
=C2=A0
Something like:
SELECT count(*) FROM event group by (tsrange with &&);
=C2=A0
PS: In my real query the tsrange and other data is the result of a que= ry involving multile tables, this is just a simplified example to deal with= the "group by tsquery"
=C2=A0
Thanks.
=C2=A0
--
Andrea= s Joseph Krogh
CTO / Partner<= /span> - Visena AS
Mobile: +47 90= 9 56 963
=3D""
------=_Part_42_463236998.1454025954664-- ------=_Part_41_10210113.1454025954647 Content-Type: image/png Content-Transfer-Encoding: base64 Content-Disposition: inline Content-ID: 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 ------=_Part_41_10210113.1454025954647-- ------=_Part_40_575755565.1454025954647--