Vardiyaya göre alınış konumları
İş vakasının ikinci hedefini çözme zamanı. NYC ilçeleri içinde her alınış konumu ve vardiya için AvgFarePerKM, RideCount ve TotalRideMin nedir?
Bu egzersiz, kursun bir parçasıdır
SQL Server'da Fonksiyonlar ve Saklı Yordamlar Yazma
Egzersiz talimatları
@Borough nvarchar(30)giriş parametresini kabul eden ve kayıtları eşleşenBoroughdeğeriyle sınırlayancuspPickupZoneShiftStatsadlı bir saklı yordam oluştur.PickupDate'inhourdeğerinidbo.GetShiftNumber()işlevine geçirerek'Shift'i hesapla.PickupDatein yalnızcahourkısmını seçmek içinDATEPARTişlevini kullan.PickupDatehaftanın günü, vardiya ve Zone'a göre grupla.PickupDatehaftanın gününe (Pazartesi ilk olacak şekilde), vardiyaya veTotalRideMine göre sırala.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
-- Create the stored procedure
CREATE PROCEDURE dbo.cuspPickupZoneShiftStats
-- Specify @Borough parameter
@Borough nvarchar(30)
AS
BEGIN
SELECT
DATENAME(WEEKDAY, PickupDate) as 'Weekday',
-- Calculate the shift number
___.___(___(___, ___)) as 'Shift',
Zone.Zone as 'Zone',
FORMAT(AVG(dbo.ConvertDollar(TotalAmount, .77)/dbo.ConvertMiletoKM(TripDistance)), 'c', 'de-de') AS 'AvgFarePerKM',
FORMAT(COUNT (ID),'n', 'de-de') as 'RideCount',
FORMAT(SUM(DATEDIFF(SECOND, PickupDate, DropOffDate))/60, 'n', 'de-de') as 'TotalRideMin'
FROM YellowTripData
INNER JOIN TaxiZoneLookup as Zone on PULocationID = Zone.LocationID
WHERE
dbo.ConvertMiletoKM(TripDistance) > 0 AND
Zone.Borough = @Borough
GROUP BY
DATENAME(WEEKDAY, PickupDate),
-- Group by shift
___.___(___(___, ___)),
Zone.Zone
ORDER BY CASE WHEN DATENAME(WEEKDAY, PickupDate) = 'Monday' THEN 1
WHEN DATENAME(WEEKDAY, PickupDate) = 'Tuesday' THEN 2
WHEN DATENAME(WEEKDAY, PickupDate) = 'Wednesday' THEN 3
WHEN DATENAME(WEEKDAY, PickupDate) = 'Thursday' THEN 4
WHEN DATENAME(WEEKDAY, PickupDate) = 'Friday' THEN 5
WHEN DATENAME(WEEKDAY, PickupDate) = 'Saturday' THEN 6
WHEN DATENAME(WEEKDAY, PickupDate) = 'Sunday' THEN 7 END,
-- Order by shift
___.___(___(___, ___)),
SUM(DATEDIFF(SECOND, PickupDate, DropOffDate))/60 DESC
END;