Lieux de prise en charge par quart de travail
Il est temps de résoudre le deuxième objectif de l'étude de cas. Quelles sont les valeurs de AvgFarePerKM, RideCount et TotalRideMin pour chaque lieu de prise en charge et chaque quart de travail dans un arrondissement de NYC?
Cette activité fait partie du cours
Écrire des fonctions et des procédures stockées dans SQL Server
Instructions de l’exercice
- Créez une procédure stockée nommée
cuspPickupZoneShiftStatsqui accepte@Borough nvarchar(30)comme paramètre d'entrée et limite les enregistrements à la valeurBoroughcorrespondante. - Calculez le
'Shift'en transmettant l'hourdePickupDateà la fonctiondbo.GetShiftNumber(). Utilisez la fonctionDATEPARTpour ne sélectionner que la portionhourdePickupDate. - Regroupez par le jour de semaine de
PickupDate, le quart de travail et la Zone. - Triez par le jour de semaine de
PickupDate(avec lundi en premier), le quart de travail etTotalRideMin.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
-- 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;