Skocz do zawartości

[sql] Pomoc Przy Zapytaniu


agnieszka p.

Rekomendowane odpowiedzi

Witam,

mam problem z zapytaniem i byłabym wdzięczna za każdą pomoc. Mam tabelkę "tabelka" o kolumnach (column1-column12 oraz sn, tn, registration_date, plec). Zakładam, że "sn" to "session number" a "tn" to "transaction number". W jednej sesji mamy kilka transakcji, a więc może być kilka rekordów z takim samym numerem sesji a kolejnymi numerami transakcji. Czyli mamy numer sesji 1 i dla niej rekordy z numerami transakcji 1,2,3,4. Następnie sesja numer 2 oraz numery transakcji 1,2. Czyli w sumie np 6 rekordów. "&var_date" to zmienna która przyjdzie nam gdzieś z góry, np w argumencie funkcji.

Przykładowe zapytanie poniżej:

 

 SELECT column1,
       column10,
       column2,
       column11,
       column12,
       &var_date AS jakas_data
FROM tabelka
WHERE (sn, tn, column1, column2) IN
       (SELECT MAX(sn), MAX(tn), column1, column2
          FROM tabelka r
         WHERE TRUNC(registration_date) <= &var_date
         GROUP BY column1, column2)
   AND plec IN ('M')
ORDER BY column1, column2, &var_date;

 

Chciałabym na daną datę wybierać odpowiednie wartości z bazy. To znaczy maksymalny numer sesji oraz dla tej sesji maksymalny numer transakcji (dla poszczególnych wartości: column1, column2).

Zapytanie powyżej zwraca mi maksymalny numer sesji (dobrze) oraz maksymalny numer transakcji (źle bo wybiera w ramach całej tabeli), natomiast chciałabym aby wybierał maksymalny numer sesji oraz dla niej maksymalny numer transakcji. Podzapytanie powyżej zwróci mi numer sesji 2 oraz numer transakcji 4. Tak więc całe zapytanie zwróci zero wyników. Chciałabym, aby podzapytanie zwróciło numer sesji 2, oraz dla niej najwyższy numer transakcji, czyli także 2.

Próbowałam dodać kolejne podzapytanie, ale jakoś nie mogę sobie z tym poradzić.

Pomoc bardzo mile widziana

Odnośnik do komentarza
Udostępnij na innych stronach

Może w podzapytaniu spróbuj

 

SELECT MAX(sn), MAX(tn), column1, column2
FROM tabelka r
WHERE TRUNC(registration_date) <= &var_date
GROUP BY column1, column2
ORDER MAX(tn) DESC

lub

SELECT MAX(sn), MAX(tn) as `max`, column1, column2
FROM tabelka r
WHERE TRUNC(registration_date) <= &var_date
GROUP BY column1, column2
ORDER `max` DESC

 

Jak rozumiem `tn` to numer transakcji.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...