Tabela tymczasowa z flagowaniem daty

0

Cześć, mam problem z tabelą tymczasową zwracającą oflagowanie dat,
mam widok stworzony jako unię dwóch tabel:
select
ID
,data
from tabela1
union all
select
ID
,data
from tabela2

Teraz potrzebuję dodać kolumnę, która zwróci najnowszą datę z każdej tabeli osobno, bo odświeżane są w innych interwałach czasowych i chcę to zrobić przy pomocy tabeli tymczasowej. Wie ktoś może w jaki sposób to rozwiązać?

1

zwróci najnowszą datę z każdej tabeli osobno

Nie bardzo rozumiem jak to ma wyglądać.

Nie możesz po prostu dodać MAX(data) do każdego z zapytań?

0

Nie kumam po co łączysz dane w 1 zbiór jeśli i tak chcesz później pracować na 2 zbiorach. Ale tak czy inaczej - czy coś w finalnym widoku (tym co podałeś) definiuje tabele 1 i tabele 2 ? rożny zakres ID albo coś? W innym wypadku nie da się tego zrobić już z finalnego View. Co najwyżej już trzeba zmienić kod na jego poziomie.

0

@BlackBad: @hipekk: tabela.JPGDD.txt

Wrzucam kod i widok i w kolumnie czy obowiązuje chcę zrobić flagowanie tej daty

0

Podpisuję śie pod postami kolegów - strasznie opisujesz problem. Ale o ile dobrze rozumiem to chodzi o cos w ten deseń (na podstawie Twojego kodu):

SELECT
DATA AS DATA_SPRAWOZDAWCZA
,(Extract(year from(to_date(data, 'YY/MM/DD')))||'-'||(TRUNC(((Extract(month from(to_date(data, 'YY/MM/DD')))-1)/3),0)+1)) AS DATA_KWARTALNA
,CASE WHEN (SELECT MAX(DATA) FROM ANKIETA_FIZ) < Data THEN 0 ELSE 1  END AS CZY_OBOWIĄZUJE
,FUNDIDENTIFICATION
,L_UCZ_OGOLEM
,L_UCZ_FIZYCZNE
,L_UCZ_PRAWNE_OGOLEM
,L_CI_JONOSPR
FROM ANKIETA_FIZ

UNION ALL

SELECT
TO_CHAR(TO_DATE(OKRES_DO,'YY/MM/DD'), 'YYYY-MM-DD') AS DATA_SPRAWOZDAWCZA
,CAST((ROK||'-'||KWARTAL) AS VARCHAR2(11)) AS DATA_KWARTALNA
,CASE WHEN (SELECT MAX(TO_DATE(OKRES_DO,'YY/MM/DD')) FROM FIQ_UCZESTNICY_INFO) < TO_DATE(OKRES_DO,'YY/MM/DD') THEN 0 ELSE 1  END AS CZY_OBOWIĄZUJE 
,CAST(PODMIOTY.ID_KRAJ AS VARCHAR2(11)) AS FUNDIDENTIFICATION
--,CAST(FIQ_UCZESTNICY_INFO.ID_PODMIOTU AS VARCHAR2(11)) AS ID_BO_ESPI
,CAST(LACZNA_LICZBA_REJESTR AS NUMBER) AS L_UCZ_OGOLEM
,CAST(REJESTR_OSOB_FIZYCZ AS NUMBER) AS L_UCZ_FIZYCZNE
,CAST(REJESTR_OSOB_PRAW AS NUMBER) AS L_UCZ_PRAWNE_OGOLEM
FROM FIQ_UCZESTNICY_INFO
INNER JOIN PODMIOTY ON FIQ_UCZESTNICY_INFO.ID_PODMIOTU = PODMIOTY.ID_PODMIOTU

Konwersje sobie dopracuj chodzi o zasadę jak można to zrobić (zakładając ze zrozumiałem)

0

Uwielbiam jak ktoś wrzuca kilka informacji które się rozjeżdżają...

W zapytaniu (czemu jest w pliku a nie w treści posta?) trzecia kolumna:
NULL AS CZY_OBOWIĄZUJE

Na screenie trzecia kolumna:
screenshot-20210408133844.png

Pomijając to - czyli w kolumnie CZY_OBOWIĄZUJE ma być 1 gdy data w kolumnie DATA_SPRAWOZDAWCZA ma największą wartość ze wszystkich?

0

Kurczę, przepraszam, faktycznie namieszałem trochę, ale w sumie nie wiedziałem jak opisać problem tak żeby było w miarę zrozumiale, obiecuję poprawę:)
hippek- tak, data_obowiązywania=czy_obowiązuje. Tak, dokładnie w kolumnie czy_obowiązuje ma zwracać 1 jeżeli data sprawozdawcza przyjmuje najwyższą wartość.
Jeszcze do BlackBad - scalenie jest po to żeby te dane z rejestrów były w jednym widoku, natomiast pracuję na dwóch tabelach osobno, bo w innych przedziałach czasowych są zasilane- tabela1 raz na rok a tabela2 cztery razy w roku, dlatego najświeższe dane dla tabeli2 to wcale nie muszą być najnowszymi dla tabeli1 i też po to to oflagowanie właśnie

0

BlackBad: To akurat dobrze napisałem, po wrzuceniu Twojego rozwiązania zwraca wszędzie 1 a nie dla najnowszej daty z danej tabeli
screenshot-20210408145214.png

1

A jasne :) literówka popraw na:

,CASE WHEN Data <  (SELECT MAX(DATA) FROM ANKIETA_FIZ) THEN 0 ELSE 1  END AS CZY_OBOWIĄZUJE

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