Twoje podejście do funkcji to_char jest trochę zbyt optymistyczne. Masz dwie możliwości wykorzystać funkcje EXECUTE ale będziesz musiał napisać funkcje, która będzie ją wykorzystywała lub na podstawie nr dnia wybrać odpowiednią kolumnę, ponieważ wykorzystujesz funkcje last_day (zakładam, że ma ona działać jak w oraclu) to tak naprawdę powinieneś wybrać tylko dni od 28 do 31.
W poniższym przykładzie zrobiłem pełną wersję, tyle że zastąpiłem funkcje last_day i oczywiście zasymulowałem sobie tabelę dni, ma nadzieję, że dobrze odczytałem twoje intencje.
select
data_transakcji,
date_part('day', data_transakcji)::int as dzien,
case date_part('day', data_transakcji)::int
when 01 then dzien_01 when 02 then dzien_02 when 03 then dzien_03 when 04 then dzien_04 when 05 then dzien_05
when 06 then dzien_06 when 07 then dzien_07 when 08 then dzien_08 when 09 then dzien_09 when 10 then dzien_10
when 11 then dzien_11 when 12 then dzien_12 when 13 then dzien_13 when 14 then dzien_14 when 15 then dzien_15
when 16 then dzien_16 when 17 then dzien_17 when 18 then dzien_18 when 19 then dzien_19 when 20 then dzien_20
when 21 then dzien_21 when 22 then dzien_22 when 23 then dzien_23 when 24 then dzien_24 when 25 then dzien_25
when 26 then dzien_26 when 27 then dzien_27 when 28 then dzien_28 when 29 then dzien_29 when 30 then dzien_30
else dzien_31 end as wynik
from
(
select data_transakcji::date
,01 as dzien_01,02 as dzien_02,03 as dzien_03,04 as dzien_04,05 as dzien_05,06 as dzien_06,07 as dzien_07,08 as dzien_08,09 as dzien_09,10 as dzien_10
,11 as dzien_11,12 as dzien_12,13 as dzien_13,14 as dzien_14,15 as dzien_15,16 as dzien_16,17 as dzien_17,18 as dzien_18,19 as dzien_19,20 as dzien_20
,21 as dzien_21,22 as dzien_22,23 as dzien_23,24 as dzien_24,25 as dzien_25,26 as dzien_26,27 as dzien_27,28 as dzien_28,29 as dzien_29,30 as dzien_30
,31 as dzien_31 from generate_series (current_date - interval '95 day',current_date,interval '1 day') data_transakcji
) dni
where
data_transakcji = date_trunc('month',data_transakcji) + interval '1 month' - interval '1 day';
Ostatnio edytowany przez c_michal (2013-01-14 23:24:27)