Maison >base de données >tutoriel mysql >Comment identifier les plages de dates qui se chevauchent dans PostgreSQL pour l'adhésion à l'équipe de joueurs ?
Problème
Un utilisateur cherche à récupérer une liste de joueurs ayant appartenu à un équipe spécifique au cours d’une période d’année donnée. La requête initialement proposée est la suivante :
SELECT * FROM contract JOIN team USING (name_team) JOIN player USING(name_player) WHERE name_team = ? AND DATE_PART('YEAR',date_join)>= ? AND DATE_PART('YEAR',date_leave)<= ?
Cependant, cette requête n'identifie pas efficacement les plages de dates qui se chevauchent.
Solution correcte
Pour déterminer avec précision les plages de dates qui se chevauchent, la requête doit être modifiée pour prendre en compte les critères suivants :
Requête optimisée
La requête suivante fournit une requête plus précise solution :
SELECT DISTINCT name_player FROM contract WHERE name_team = ? AND (date_join, COALESCE(date_leave, CURRENT_DATE)) OVERLAPS (date '2009-01-01', date '2010-01-01'); -- upper bound excluded
Explication
Considérations supplémentaires
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!