From: | "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com> |
---|---|
To: | Andreas Joseph Krogh <andreas(at)visena(dot)com> |
Cc: | "pgsql-sql(at)postgresql(dot)org" <pgsql-sql(at)postgresql(dot)org> |
Subject: | Re: GROUP BY overlapping (tsrange) entries |
Date: | 2016-01-29 19:23:01 |
Message-ID: | CAKFQuwbWMBn2geT-anZE33BsaN9JjYA9Hx=J5HetR=6p3gyaVg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
On Fri, Jan 29, 2016 at 10:30 AM, Andreas Joseph Krogh <andreas(at)visena(dot)com>
wrote:
> På fredag 29. januar 2016 kl. 17:59:52, skrev David G. Johnston <
> david(dot)g(dot)johnston(at)gmail(dot)com>:
>
> On Fri, Jan 29, 2016 at 9:45 AM, Andreas Joseph Krogh <andreas(at)visena(dot)com>
> wrote:
>
>> På fredag 29. januar 2016 kl. 02:43:37, skrev Andreas Joseph Krogh <
>> andreas(at)visena(dot)com>:
>>
>> På fredag 29. januar 2016 kl. 02:11:52, skrev Andreas Joseph Krogh <
>> andreas(at)visena(dot)com>:
>>
>> På fredag 29. januar 2016 kl. 02:02:46, skrev Michael Moore <
>> michaeljmoore(at)gmail(dot)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
>
> 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
"""
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.
The only other potential query approach that comes to mind is some kind of
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.
David J.
From | Date | Subject | |
---|---|---|---|
Next Message | Misa Simic | 2016-01-29 19:33:08 | Re: GROUP BY overlapping (tsrange) entries |
Previous Message | Michael Moore | 2016-01-29 18:17:51 | Re: GROUP BY overlapping (tsrange) entries |