Temat: pobieranie danych dla jednego rekordu z innego wczesniejszego rekordu
problem przedstawia sie nastepujaco.
mam dwie tabele:
- jedna przechowujaca szczegolowe dane nt kolejnych dat
- druga przchowujaca szczegolowe dane sprzedanego produktu w tym m.in. date sprzedazy tego produktu
napisalem taki sql aby pobrac dane sprzedazy zagregowane na konkretny dzien
SELECT sum(b.saldo) as saldo, day_of_year,week_of_year,month_of_year,quarter,year, count(b.id) as count, de.year as join_year, de.month_of_year as join_month_of_year
FROM data.balance as b
INNER JOIN date de ON b.valid_from_id = de.id AND de.day_of_week != 6 AND de.day_of_week != 7
where b.ghost = false AND ( b.valid_from_id >= (SELECT public.get_date_data_id('2011-01-01')) AND b.valid_from_id <= (SELECT public.get_date_data_id('2011-01-31')) ) AND product_3_id IN ( 59,58,60 ) AND b.product_group_id IN ( 3 )
GROUP BY day_of_year,week_of_year,month_of_year,quarter,year , de.month_of_year , de.year
order by day_of_year
i dziala to prawidlowo.
teraz jednak potrzebuje pobrac ta sama sprzedaz tyle ze ma byc to wykonane tak by np sprzedaz z 3.01 byla przypisana do daty 4.01, sprzedaz z 4.01, przypisana do daty 5,01, sprzedaz z 5.01 przypisana do daty 6.01 itd...
napisalem wiec sql ktory teoretycznie to wykonuje:
SELECT sum(b.saldo) as saldo_prev, day_of_year,week_of_year,month_of_year,quarter,year,
count(b.id) as count_prev, de.year as join_year, de.month_of_year as join_month_of_year
FROM data.balance as b
INNER JOIN (SELECT day_of_year,week_of_year,month_of_year,quarter,year FROM date where date >= '2011-01-01' AND date <= '2011-01-31' group by day_of_year,week_of_year,month_of_year,quarter,year) as de ON (SELECT day_of_year from date where id = b.valid_from_id) = de.day_of_year - 1
where b.ghost = false AND ( b.valid_from_id >= (SELECT public.get_date_data_id((SELECT public.get_date_prev('2011-01-01', 'day', 'from'))::text)) AND b.valid_from_id <= (SELECT public.get_date_data_id((SELECT public.get_date_prev('2011-01-31', 'day','to'))::TEXT)) ) AND product_3_id IN ( 59,58,60 ) AND b.product_group_id IN ( 3 )
GROUP BY day_of_year,week_of_year,month_of_year,quarter,year , de.month_of_year , de.year
order by day_of_year
teoretycznie, gdyz z racji tego ze w sobote, i niedz nie ma sprzedazy sql zwraca w niektorych miejscach bledne dane. np nie zwrca wcale sprzedazy z 10,01 gdzie powinien zwrocic sprzedaz z 7.01, za to ta wlasnie sprzedaz zwraca 8.01 kiedy to zadnej sprzedazy byc nie ma prawa., podobnie dzieje sie z kolejnymi roznicami gdzie sprzedaz piatkowa powinna pojawic sie w poniedzialek a sql zwraca mi ja w sobote.
znajdzie sie tutaj ktos na tyle madry aby mi pomoc rozgrysc ten problem?