CommencerCommencez gratuitement

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>
Voir le cours

Instructions de l’exercice

  • Créez une procédure stockée nommée cuspPickupZoneShiftStats qui accepte @Borough nvarchar(30) comme paramètre d’entrée et limite les enregistrements à la valeur Borough correspondante.
  • Calculez le 'Shift' en transmettant l’hour de PickupDate à la fonction dbo.GetShiftNumber(). Utilisez la fonction DATEPART pour sélectionner uniquement la partie hour de PickupDate.
  • 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 et TotalRideMin.

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;
Modifier et exécuter le code