warunek badania (być moze CASE) - oracle sql

warunek badania (być moze CASE) - oracle sql
K1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

cześć,
mam do rozwiązania pewien problem. w tabeli mam daną liczbową (możliwe wartości od jakiejś cyfry do jakiejś cyfry), w drugiej kolumnie mam datę pewnego zdarzenia oraz ostatnią kolumnę z datą na którą dane są w tabeli wystawione (zawsze pierwszy dzień miesiąca - każdy wiersz dopisywany jest wlasnie co miesiąc). oczywiście w tabeli znajduje się jakies ID wiersza. I teraz potrzebuję dodatkową kolumnę która będzie zawierała dane na podstawie tego jak wartość liczbowa zmienia się wraz z każdym kolejnym miesiącem (wierszem w mojej tabeli). czyli jeżeli wartość w kolumnie z liczbami w lutym była 8 a w marcu 10 to ta kolumna musi przyjmować wartość 'z 8 do 10' przy czym wartość 8 badana jest na datę jaka istnieje w kolumnie z datą zdarzenia. poniżej załacznik z tabelą która to odrazuje jakie wartości nowa kolumna powinna zawierac. oczywiście to powinien być jakiś automat ktory wyznaczy tą wartość nowej kolumny

może ktoś jest w stanie pomóc jak takie coś zrealizować?

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
0

Najproście będzie użyć LAG

Kopiuj
select 
  "data"
  ,"liczba"
  ,case 
      when COALESCE(LAG("liczba",1) over (order by "data"),"liczba") = "liczba"
      then 'Bez zmian'
      else "liczba" || '/' || LAG("liczba",1) over (order by "data")
      end as kol
FROM Tab1;

http://sqlfiddle.com/#!4/18c51/17

K1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Panczo dzięki - czy da się CASem obsłużyć taki przypadek ale żeby tworzył nową kolumnę ale z pewnym warunkiem ktory zaraz opiszę. Bo w Twoim rozwiązaniu zawsze cofasz się jeden wiersz do góry i sprawdzasz czy wartość liczby jest inna niż w bieżącym wierszu i w zależności od tego wpisujesz określoną wartość, ale ja musze niestety skomplikować sprawę bo to do której wartości porównuje się bieżący wiersz uzależnione jest od kolumny "data_zdarzenia" a więc nie zawsze chce się cofać jeden wiersz do góry ale chce się cofać tyle wierszy do góry aby natrafić na najnowszą datę w kolumnie "data_zdarzenia" i z wiersza gdzie jest ona najbliższa aktualnej pobierać wartość LICZBA (i jdenoczesnie pozostałe warunki musza być zachowane) i ją później wpisywać do nowej kolumny. Czy takie coś da się obsluzyc CASEm? czy może jakies inne techniki należy uzyc (pytanie jakiej?). Będę Ci wdzięczny za pomoc

K1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Marcin.Miga ale czy LAGiem i CASEm jestem w stanie taką opisaną przeze mnie sytuację objąć? tak żebym jak wspomniałem cofał się różną liczbę wierszy zaleznie od daty?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.