warunek badania (być moze CASE) - oracle sql

warunek badania (być moze CASE) - oracle sql
K1
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 5 lat
  • 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ć?

  • dd.png (16 KB) - ściągnięć: 188
edytowany 2x, ostatnio: Koko1
kate87
No dobrze a co już napisałeś?
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 5 godzin
  • Postów:3881
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

edytowany 1x, ostatnio: Panczo
K1
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 5 lat
  • 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

Marcin.Miga
TO nie CASE to załatwia, ale LAG. Z tym pokombinuj/poczytaj
K1
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 5 lat
  • 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.