Zadanie z funkcjami.

0

Witam. Mam problem z pewnym zadaniem. Mianowicie mam z Bazy Northwind wyciągnąć nr najdłuższego i najkrótszego zamówienia i czas jego trwania.

Próbowałem łączyć funkcję Datediff , Max , Min ale kompletnie mi to nie wychodzi. Datediff pokaże czas trwania zamówienia , ale żadna kombinacja z min/max mi nie wyświetla.
Wie ktoś jak to zrobić ?

Z góry dzięki za pomoc :)

0

Pokaż jak próbowałes.

0

Use northwind
Select OrderID , Cast (Max(ShippedDate-OrderDate) AS INT ) as 'max'
from Orders
Group by OrderID

Select OrderID , MAX(ShippedDate-OrderDate) as 'max' , Cast('max' as int) as 'maxliczb'
From Orders
Group By OrderID

Mniej więcej tak tylko dla Maxa bo dla Mina bd analogicznie , ale ja wyciągnąć max z działa i jeszcze zmienić na liczbę.. ?

0

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 !

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