Есть таблица, которая хранит дату и число:
| id | t | item_code |
---------------------------------------------
| 1 | 2008-02-04 | 11 |
| 2 | 2008-04-04 | 12 |
| 3 | 2008-06-04 | 13 |
| 4 | 2008-09-04 | 14 |
| 5 | 2009-02-04 | 21 |
| 6 | 2009-04-04 | 22 |
| 7 | 2009-06-04 | 23 |
| 8 | 2009-09-04 | 24 |
| 9 | 2010-02-04 | 31 |
|10 | 2010-04-04 | 32 |
|11 | 2010-06-04 | 33 |
|12 | 2010-09-04 | 34 |
Я хотел бы получить на выходе:
| 2008-02-04 | 2008-09-04 | 11 | 14 |
| 2009-02-04 | 2009-09-04 | 21 | 24 |
| 2010-02-04 | 2010-09-04 | 31 | 34 |
Т.е. получается что мне в каждой строке нужны минимальная и максимальная дата каждого года + значения для каждой из этих дат.
Такое вообще возможно сделать не прибегая к курсорам и всему подобному? Хотелось бы обычным запросом решить. Но меня смущает цикл. Он ведь здесь нужен. Ну или объединять в кучу union.
Попробовал так:
SELECT MIN(t::timestamp::date) AS startyear, MAX(t::timestamp::date) as endyear, item_code
FROM item_codes
GROUP BY item_code
order by startyear
... но вышла какая-то фигня.