podzapytanie w klauzuli FROM i szukanie ostatniego rekordu

0

Witam

Ostatnio zacząłem bawić się w SQLu Oraclowym i mam problem z pewnym podzapytaniem. Może na początek opiszę co ma być wynikiem tego zapytania i jak wg mnie miałoby ono działać. Dla każdego up."c_PPE_ID" znajdującego się w tabeli up ma przypisać ostatni (najnowszy) rekord z tabeli wr_c. W tabeli wr_c kolumna "c_PPE_ID" nie jest kluczem głównym tej tabeli i posiada zduplikowane wartości, stąd najpierw filtruje wg określonego PPE_ID, później sortuje wg klucza a później wybiera ostatni rekord. Alternatywnie mogłoby to działać na zasadzie posortuj wg "c_Wr_ID" następnie usuń duplikaty po PPE_ID i wtedy by przypisywało wartość. Niestety nie wiem czy coś takiego można zrobić. Wracając do mojego zapytania, to jeżeli wklepie taki kod jak poniżej do SQL Developera to wyświetla mi się komunikat: "ORA-00904: "UP"."c_PPE_ID": niepoprawny identyfikator". Jeżeli w poniższym zapytanie zamiast up."c_PPE_ID" wpiszę konkretną wartość to działa normalnie i wyświetla prawidłową wartość. Ktoś ma jakieś pomysły dlaczego poniższe zapytanie nie działa i co zmienić aby zadziałało? Z góry dzięki za wszelkie sugestie.

 
select
up."c_PPE_ID",

(
SELECT *
FROM (
      SELECT wr_c."c_Wr_EnDeklRok"
      FROM BILLING."MT_c_Wr" wr_c
      WHERE wr_c."c_PPE_ID" = up."c_PPE_ID"
      ORDER BY wr_c."c_Wr_ID" DESC
      )
WHERE ROWNUM <=1
)
as "wol"

from BILLING."MT_TarUklPom" tup
inner join BILLING."MT_UklPom" up on up."UklPom_ID" = tup."UklPom_ID"

0
  1. w jedną kolumnę nie wciśniesz wielu wartości. A to sugeruje *. WIem, że ta * odnosi się do jednego pola z podzapytania, ale parser niekoniecznie musi to wiedzieć.
  2. Nazywaj podzapytania
  3. ROWNUM to chyba funkcja...
  4. wydaje mi się, że w najbardziej zagnieżdżonym selekcie nie będzie widoczne "up". Widoczność jest chyba tylko jeden poziom wyżej... (może w Ora jest inaczej)
0

Ad1. Wiem że nie wcisnę wielu wartości i zapytanie wewnętrzne musi zwracać jedną wartość. Jak wpisuję zamiast gwiazdki "wr_c."c_Wr_EnDeklRok"" to mam ten sam rezultat. Natomiast jeżeli zamiast up."c_PPE_ID" wklepię jakąś przykłądową wartość to otrzymuję prawidłową wartość więc to chyba nie ma znaczenia
Ad2. Czyli po zamknięciu zapytania po FROMie w 11 lini wpisać np "as ZapWewn"?
Ad3. Tak to funkcja. Szukałem jak napisac zapytanie wyszukujące ostatniego wiersza z tabeli i takie rozwiązanie znalazłem w internecie. Sprawdzałem na prostym przykładzie i działa.
Ad4. No i chyba tutaj leży pies pogrzebany. Tylko że jak wpisuję dokładną nazwę/adres tabeli to wyskakuje analogiczny komunikat odnośnie niepoprawnego identyfikatora

0

Funkcje Analityczne, a szczególnie LAST_VALUE

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