Patryk
Malaca
Obecnie pracuję na
stażu
Temat: Pobranie z bazy danych 12 ostatnich emisięcy dla danego...
MAm tabelę, z któej pobieram, któa ma kolumny:data zapytania 'YYYY/RR'
data zainteresowania 'YYYY/RR'
ilosc
Mam tej tabeli wyrzucić dla danego miesiąca w danym roku zainteresowania wszystkie meisiące zapytania z ostatnich 12 miesięcy
Czyli przykłądowo jeśli interesuje mnie data zainteresowania 2012/4 to dla tej daty ma mi wyrzucić:
data_zainteresowania data_zapytania ilosc
2012/4 2011/5 151
2012/4 2011/6 146
2012/4 2011/7 122
2012/4 2011/8 5445
2012/4 2011/9 111
2012/4 2011/10 55
2012/4 2011/11 487
2012/4 2011/12 25
2012/4 2012/1 45
2012/4 2012/2 85
2012/4 2012/3 87
2012/4 2012/4 21
itd dla każdej daty zainteresowania
Dodatkowo, żeby było lepiej operować na liczbach rozbiłem te daty na rok i miesiąc funkcją SUBSTR wiec tabele wyjściowe powinny wyglądać:
rok_zainteresowania miesiac_zainteresowania rok_zapytania miesiac_zapytania ilosc
Dodam, że wszystkie wartości są w tabeli poczatkowej jako stringi zapiusywane w postaci YYYY/MM dlatego trudno mi tu operować na datach chyba, że ktoś wie jak bo jak usiłuję zmienić np 2012/7 na date to mi wywala błąd. Musiałyby być wszystkie meisiace zapisywane 2cyfrowo a nie są. Zrobiłęm takie zapytanie, ale jest błędne. Ktoś wie, jak to zrobić poprawnie?
SELECT
SUBSTR(data_zainteresowania, 1,4)::integer as rok_zaint,
SUBSTR(data_zainteresowania, 6,7)::integer as miesiac_zaint,
SUBSTR(data_zapytania, 1,4)::integer as rok_zapytania,
SUBSTR(data_zapytania, 6,7)::integer as miesiac_zapytania,
ilosc
FROM moja_tabela
WHERE IF (SUBSTR(data_zapytania, 1,4)::integer = SUBSTR(data_zainteresowania, 1,4)::integer,
SUBSTR(data_zapytania, 6,7)::integer <= SUBSTR(data_zainteresowania, 6,7)::integer,
SUBSTR(data_zapytania, 6,7)::integer +1<= SUBSTR(data_zainteresowania, 6,7)::integer)
ORDER BY data_zapytania ASC";