CommencezCommencez gratuitement

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

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 ne sélectionner que la portion hour de PickupDate.
  • 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 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