2010-12-08 29 views
2

J'ai une table de rendez-vous avec des rendez-vous pour un certain nombre de 'ressources' ce que je dois faire est d'interroger cela et retourner (pour une ressource particulière) tous les emplacements de rendez-vous libres sur une plage de dates.tsql intesect entre 2 jeux d'enregistrements datetime

Je pensais que la meilleure façon d'aborder cela serait de générer une table temporaire des heures possibles de rendez-vous (comme la durée du rendez-vous peut être 30/60/90 minutes - la durée du rendez-vous serait spécifiée pour la requête). puis sélectionnez l'intersection de ces deux jeux d'enregistrements. c'est-à-dire toutes celles-ci - dans la plage de dates - où il n'y a PAS de nominations dans le tableau des nominations. retournant ainsi tous les rendez-vous possibles pour cette ressource.

ou peut-être simplement - de nouveau - générer les enregistrements de dates de rendez-vous possibles, et ensuite les rendez-vous réels déjà réservés ..?

à moins bien sûr que quelqu'un puisse suggérer une option plus facile.

pas non plus tout à fait sûr comment générer la table de la table-à-dire possibles avec des enregistrements pour 2010-12-08 09:00, 2010-12-08 10:00, et ainsi de suite (pour les rendez-1 h) ...

des idées?

modifier: ont une vague idée sur les ... possibles

DECLARE @startDate DateTime 
DECLARE @EndDate DateTime 

set @startDate = '2010-12-08 09:00' 
set @endDate = '2010-12-11 09:00'; 

with mycte as 
(
    select cast(@startDate as datetime) DateValue 
    union all 
    select dateadd(mi,30,DateValue) 
    from mycte 
    where DateValue <= @endDate 
    and datepart(hh, dateadd(mi,30,DateValue)) Between 9 AND 16 

) 
select DateValue 
from mycte 

Répondre

1

Ceci est un problème de lacunes classiques et des îles. C'est essentiellement un problème commun où vous devez identifier les valeurs manquantes (lacunes) dans une séquence. Heureusement, il y a un chapitre gratuit sur ce sujet dans le livre de Manning, SQL Server MVP Deep Dives. Espérons qu'il vous inspirera puisqu'il donne des conseils sur un certain nombre d'approches possibles.

http://www.manning.com/nielsen/SampleChapter5.pdf

Voici la description de Itzik Ben-Gan du problème, cité du chapitre ci-dessus.

Les lacunes et les problèmes des îles impliquent les valeurs manquantes dans une séquence ... Les séquences impliquées peuvent également être temporelle, telles que les dates de commande, certains dont sont absents en raison de l'état inactif périodes (week-ends, jours fériés). Trouver périodes d'inactivité est un exemple de le problème des lacunes, et la recherche des périodes de l'activité est un exemple du problème îles.

+0

mal lire cela, merci – nat