Alias w podzapytaniu

WC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 137
0

Witam,
Mam takie zadania do wykonania:

a. Wyświetl wszystkie dane na temat klienta, który wypożyczył samochód na najdłuższy okres czasu oraz termin, na jaki samochód został wypożyczony.
b. Wyświetl imiona, nazwiska, numery dowodów klientów oraz daty wypożyczeń i zwrotów przez nich samochodów, dla klientów, którzy wypożyczyli i oddali samochody w okresie, pomiędzy wypożyczeniem przez klienta LIPKA JAKUB pierwszego samochodu a oddaniem przez niego ostatniego z wypożyczanych samochodów. Dane klienta LIPKA JAKUB mają nie być wyświetlone.

Tabele ( od góry: klienci, wypozyczenia ):
https://zapodaj.net/images/8ec367a2e6061.jpg

Zapytanie a:

Kopiuj
select * from klienci where id_kli in
  ( select id_kli from wypozyczenia where data_zwr - data_wyp = 
    ( select max( data_zwr - data_wyp ) from wypozyczenia ) );

Nie wiem jak wstawić alias do nazwania terminu, czyli różnicy pomiędzy data_wyp i data_zwr - w ogóle nie dam rady tej wartości wyświetlić.

Zapytanie b:
Na tą chwilę mam pytanie: czy trzeba tu stosować joiny czy wystarczą same podzapytania + czy mogę zastosować podzapytanie np. w tym momencie ->

Kopiuj
select k.nazwisko, k.imie, k.nr_dowodu, w.data_wyp, w.data_zwr from klienci k natural join wypozyczenia w where id_kli in
  ( select id_kli from wypozyczenia where data_wyp between  

czyli po between... ?

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
1

Drugie coś w ten deseń:

Kopiuj
SELECT ... FROM klienci k NATURAL JOIN wypozyczenia w JOIN (SELECT Min(data_wyp) data_wyp, Max(data_zwr) data_zwr FROM wypozyczenia WHERE id_klienta='JAKUB LIPKA') x ON w.data_wyp>x.data_wyp AND w.data_zwr<x.data_zwr WHERE k.id_klienta<>'JAKUB LIPKA
PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
0

@Marcin.Miga dał odpowiedź na b, to ja podpowiem na A:

coś w ten deseń:

Kopiuj
SELECT 
     k.* 
     ,W.data_zwr
     ,W.data_wyp
     ,W.data_zwr - W.data_wyp AS DNI_WYPOZYCZENIA
FROM 
    klienci K
    inner join (SELECT 
                     ROW_NUMBER() OVER (ORDER BY  data_zwr - data_wyp DESC) RN
                     ,*
               FROM 
                    wypozyczenia) W
               ON K.ID_KLI = W.ID_KLI AND W.RN=1

p.s. Jestem w szoku, że Oracle nie ma TOP...

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.