Grouping, Aggregate, Min, Max
От | Misa Simic |
---|---|
Тема | Grouping, Aggregate, Min, Max |
Дата | |
Msg-id | CAH3i69nfXAGPxHkZbS+3pmxxMB-7y2Kv_aVM6vYPWKHbAPqnXA@mail.gmail.com обсуждение исходный текст |
Ответы |
Re: Grouping, Aggregate, Min, Max
Re: Grouping, Aggregate, Min, Max |
Список | pgsql-general |
Hi All,
I am not sure how to define with words what I want to accomplish (so can't ask google the right question :) )
So will try to explain with sample data and expected result:
Scenario 1)
id | thing_id | category | period_id |
1 | 1 | A | 1 |
2 | 1 | A | 2 |
3 | 1 | A | 3 |
4 | 1 | A | 4 |
5 | 1 | A | 5 |
6 | 1 | A | 6 |
7 | 1 | A | 7 |
8 | 1 | A | 8 |
9 | 1 | A | 9 |
10 | 2 | A | 1 |
11 | 2 | A | 2 |
12 | 2 | A | 3 |
13 | 2 | A | 4 |
Expected result:
thing_id | category | periods |
1 | A | 1-9 |
2 | A | 1-4 |
(Sounds easy, group by, thing_id, category use Min and Max for period id - but further scenarios makes it a bit complicated...)
Scenario 2)
id | thing_id | category | period_id |
1 | 1 | A | 1 |
2 | 1 | A | 2 |
3 | 1 | A | 3 |
4 | 1 | A | 4 |
5 | 1 | B | 5 |
6 | 1 | B | 6 |
7 | 1 | B | 7 |
8 | 1 | A | 8 |
9 | 1 | A | 9 |
10 | 2 | A | 1 |
11 | 2 | A | 2 |
12 | 2 | A | 3 |
13 | 2 | A | 4 |
Expected result:
thing_id | category | periods |
1 | A | 1-4, 8-9 |
1 | B | 5-7 |
2 | A | 1-4 |
Scenario 3)
id | thing_id | category | period_id |
1 | 1 | A | 1 |
2 | 1 | A | 2 |
3 | 1 | A | 3 |
4 | 1 | A | 7 |
5 | 1 | A | 8 |
6 | 1 | A | 9 |
7 | 2 | A | 1 |
8 | 2 | A | 2 |
9 | 2 | A | 3 |
10 | 2 | A | 4 |
Expected result:
thing_id | category | periods |
1 | A | 1-3, 7-9 |
2 | A | 1-4 |
So goal is, to group by thing_id, category id - but if period_id is interupted (not in incremented by 1) to have aggregated spans...
To desired results we have came up using several CTE's (what makes a query a bit big, and more "procedural way": make cte what calculated diff between current and previous row, next cte uses previous one to define groupings, next cte to make aggregates etc...)
So I wonder - is there some kind of aggregate window function what does desired results?
Many Thanks,
Misa
В списке pgsql-general по дате отправления: