agora inbox for pgsql-sql@postgresql.org  
help / color / mirror / Atom feed
From: Andreas Joseph Krogh <andreas@visena.com>
To: pgsql-sql@postgresql.org
Subject: Re: GROUP BY overlapping (tsrange) entries
Date: Sat, 30 Jan 2016 00:34:16 +0100 (CET)
Message-ID: <VisenaEmail.18.9ac56d5f97b8bdff.1528fb61d8e@tc7-visena> (raw)
In-Reply-To: <CAKFQuwbWMBn2geT-anZE33BsaN9JjYA9Hx=J5HetR=6p3gyaVg@mail.gmail.com>
List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-sql>

På fredag 29. januar 2016 kl. 20:23:01, skrev David G. Johnston <
david.g.johnston@gmail.com <mailto:david.g.johnston@gmail.com>>:
On Fri, Jan 29, 2016 at 10:30 AM, Andreas Joseph Krogh <andreas@visena.com 
<mailto:andreas@visena.com>> wrote:
På fredag 29. januar 2016 kl. 17:59:52, skrev David G. Johnston <
david.g.johnston@gmail.com <mailto:david.g.johnston@gmail.com>>:
On Fri, Jan 29, 2016 at 9:45 AM, Andreas Joseph Krogh <andreas@visena.com 
<mailto:andreas@visena.com>> wrote:
På fredag 29. januar 2016 kl. 02:43:37, skrev Andreas Joseph Krogh <
andreas@visena.com <mailto:andreas@visena.com>>:
På fredag 29. januar 2016 kl. 02:11:52, skrev Andreas Joseph Krogh <
andreas@visena.com <mailto:andreas@visena.com>>:
På fredag 29. januar 2016 kl. 02:02:46, skrev Michael Moore <
michaeljmoore@gmail.com <mailto:michaeljmoore@gmail.com>>:
It is unclear to me how you got from your input data to your expected output. 
If you are "trying to count() overlapping entries" then it would seem to me 
that you would only have only one value for the count. Either a range overlaps 
or it does not.
 
Oh, sorry, the count was in wrong order.
 
Let me explain,
insert into event(name, start_time, end_time) values('a', '2015-12-20', NULL) 
, ('a', '2015-12-20', '2015-12-31') , ('a', '2015-12-25', '2016-01-01') , ('b', 
'2015-11-20', '2015-11-24') , ('c', '2016-02-01', '2016-02-03') , ('c', 
'2016-02-01', '2016-02-04')  , ('c', '2016-02-01', NULL) ; 
All 'a', 'b' and 'c' have points in common, with count a=3, b=1, c=3.
 
Note that the 'name'-column here is just to explain what I'm after and that I 
have no such column.
 
Any clever hints anyone?
 
 
​Maybe this will help...?

 

​
  https://wiki.postgresql.org/wiki/Range_aggregation 
<https://wiki.postgresql.org/wiki/Range_aggregation;
 
​David J.​




 


Yea, I've seen it, but don't like it.
 
I was (am) hoping some clever PG-guy would step up and craft som clever GROUP 
BY stuff like "GROUP BY magic_gist_equals(tsrange with &&)"
 


 
​http://www.postgresql.org/docs/9.5/static/sql-select.html 
<http://www.postgresql.org/docs/9.5/static/sql-select.html;

​""" ​
 GROUP BY will condense into a single row all selected rows that share the 
same values for the grouped expressions

"""

 
​Which means the only valid comparison for GROUP BY is equals.  The processes 
of finding a single value upon which such an equality comparison can be 
performed is the subject of the wiki page I linked.




 
Yes, I know but I'm hoping someone has a more clever idea.
 
 
The only other potential query approach that comes to mind is some kind of 
recursive CTE.



 

Interesting. Care to give an example of how to solve this using recursive CTE?
  A more structural potential approach would involve triggers and maintaining 
some form of master range table that evolves as DML is executed against the 
base table.




 


Yes, but I'm using the count() for calculating the cardinality of something, 
which might change based on some other column in another table, which is 
JOIN'ed in in my real query. So a de-normalized piggy-backing table would be 
quite non-trivial to maintain.
 
-- Andreas Joseph Krogh
CTO / Partner - Visena AS
Mobile: +47 909 56 963
andreas@visena.com <mailto:andreas@visena.com>
www.visena.com <https://www.visena.com;
 <https://www.visena.com;


 

view thread (15+ messages)  latest in thread

Message-ID: <VisenaEmail.18.9ac56d5f97b8bdff.1528fb61d8e@tc7-visena>
Permalink:  ../VisenaEmail.18.9ac56d5f97b8bdff.1528fb61d8e@tc7-visena/
Also on:    postgresql.org/message-id/VisenaEmail.18.9ac56d5f97b8bdff.1528fb61d8e@tc7-visena

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: andreas@visena.com
  Subject: Re: GROUP BY overlapping (tsrange) entries
  In-Reply-To: <VisenaEmail.18.9ac56d5f97b8bdff.1528fb61d8e@tc7-visena>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox