FIRST/LAST_VALUE (Oracle)

0

Cześć,

Przypuśćmy, że mamy takie dane:

MIESIAC DZIEN ILE x
2018-02-01 00:00 2018-02-28 00:00 8710
2018-03-01 00:00 2018-03-01 00:00 8738 8710
2018-03-01 00:00 2018-03-02 00:00 8766 8710

I teraz za pomocą funkcji wspomnianych w temacie, chciałbym uzyskiwać za każdym razem dla całego miesiąca w kolumnie x ostatnią wartość z pola ILE z miesiąca poprzedzającego, czyli w tym przypadku ostatnia wartość dla lutego to 8710, więc chce ją umieścić dla 31 dni w marcu w kolumnie x.

0

Domyślam, że trudnością nie jest wywołanie funkcji analitycznej tylko zdefiniowanie odpowiedniego okienka (tj. użycie RANGE BETWEEN).

FIRST_VALUE(ile) OVER (ORDER BY miesiac RANGE BETWEEN miesiac-LAST_DAY(ADD_MONTHS(miesiac,-1))  PRECEDING AND 0 FOLLOWING) 

Powyższe znaczy tylko tyle:

  1. Zwróć pierwsza wartość z "okienka analitycznego"
  2. W ramach okienka dane posortowane są po dacie
  3. Dla bieżącego wiersza okienko:
    • nie patrzy "do przodu/w przyszłość" (AND 0 FOLLOWING)
    • patrzy "do tyłu/w przeszłość" (N PRECEEDING)
  4. N zdefiniowane jest jako ilość dni pomiędzy "bieżącą datą" (w sensie przetwarzanego wiersza, tj. atrybutu "miesiąc"), a ostatnim dniem poprzedniego miesiąca LAST_DAY( ADD_MONTHS(miesiac,-1))

Oczywiście nie chciało mi się tego testować, więc może nie działać, ale wierzę w ten pomysł ;-)

0

Nie zwraca to pożądanego wyniku, ale mam już rozwiązanie, o które mi chodziło:

LAST_VALUE(ILE) OVER (ORDER BY MIESIAC RANGE BETWEEN INTERVAL '1' MONTH PRECEDING AND INTERVAL '1' MONTH PRECEDING)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0