Lieux de prise en charge par créneau
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 créneau au sein d’un arrondissement de New York (NYC Borough) ?
Cet exercice fait partie du cours
<cours>Écrire des fonctions et des procédures stockées dans SQL Server</cours>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 sélectionner uniquement la partiehourdePickupDate. - Regroupez par jour de la semaine de
PickupDate, créneau et Zone. - Triez par jour de la semaine de
PickupDate(avec lundi en premier), créneau 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;