Hej,
Na początek warto ustalić warunki brzegowe. Bierzemy tylko takie zlecenia które są zakończone (ShippedDate is not null) i wykorzystamy funkcję datediff do obliczenia różnicy w dniach :
select OrderId, OrderDate, ShippedDate,
DateDiff(dd,OrderDate,ShippedDate) as CzasRealizacji
from dbo.Orders
where ShippedDate is not null
order by CzasRealizacji
Teraz można wykonać to zadanie na wiele sposobów. Jedno z rozwiązań to bazujące na funkcjach rankingowych (może nie najprostsze ale fajne :) ):
with dane as(
select OrderId,
DateDiff(dd,OrderDate,ShippedDate) as CzasRealizacji,
RANK() OVER(ORDER BY DateDiff(dd,OrderDate,ShippedDate) ) as RankMin,
RANK() OVER(ORDER BY DateDiff(dd,OrderDate,ShippedDate) DESC ) as RankMax
from dbo.Orders
where ShippedDate is not null
)
Select OrderId,CzasRealizacji from dane
where RankMin =1 or RankMax=1
Wykorzystuję tu funkcje RANK() - bo zleceń z minimalnym i maksymalnym czasem możesz mieć wiele. To samo zadanie można zapisać jeszcze za pomocą grupowania czy zapytań skorelowanych. Polecam stronkę www.sqlpedia.pl, gdzie znajdziesz <a href="http://www.sqlpedia.pl/kurs-sql>kurs SQL</a> a w nim opisane w detalach wszystkie w/w konstrukcje.
pozdro !