Zadanie 21.

Dla klientów o ID 101, 111, 121, 141, 171 i 201 pokaż numer oraz datę ostatniego złożonego zamówienia. Jeśli klient nie ma na swoim koncie zamówień, powinna pojawić się stosowna informacja.

Schemat: OE, Tabele: Orders, Customers, Kolumny: customer-id, order_id, order_date, Wynik: 6 rows

p21

 

 

Rozwiązanie

SELECT customer_id as Customer, MAX(o.order_id) as "Last order",
to_char(MAX(o.order_date), 'DD.MM.YYYY') as "Last ord. date",
CASE
WHEN MAX(o.order_id) IS NULL THEN 'Ten klient nie ma zamówień'
ELSE ' '
END as Opis
FROM customers c LEFT OUTER JOIN orders o
USING(customer_id)
WHERE customer_id IN(101, 111, 121, 141, 171, 201)
GROUP BY customer_id
ORDER BY customer_id;

[collapse]
  • Marek Emtebe

    mam wątpliwości co do treści zadania,
    customer o id 101 ma 4 zamówienia
    (select c.customer_id, o.order_id, o.ORDER_DATE
    from orders o left join customers c on c.CUSTOMER_ID = o.CUSTOMER_ID
    where c.CUSTOMER_ID = 101;)

    zamówienie o id 2458 ma datę 16.08.2007, a zamówienie o id 2447 ma datę 27.07.2008
    zadanie jest takie: dla klientów pokaż numer oraz datę ostatniego złożonego zamówienia, czyli według mnie ostatnim złożonym zamówieniem jest zamówienie 2447 !

    Nie rozumiem dlaczego w rozwiązaniu jest dla klienta 101 zamówienie 2458 i data z zamówienia 2447
    Może miałoby to sens jeśli wraz z większym numerem zamówienia (order_id) szła by większa data, ale w naszej bazie tak nie jest

    Jestem nowicjuszem, napiszcie proszę czy ja źle myślę, czy może jest błąd w rozwiązaniu