2010-11-23 8 views
3

Ma table ressemble aimeSQL Comment obtenir toutes les répétitions dans un délai déterminé

int callid not null, 
datetime segstart not null, 
varchar calling_pty not null 

Ce que je veux est toutes les lignes avec le même CALLING_PTY qui se produisent plus d'une fois par jour dans les 5 minutes de l'autre .

Je suis tellement stupéfait. J'ai vu le TOP 1, datediff, et sélectionnez les exemples de lignes suivantes et précédentes, mais je ne peux pas travailler sur celui-ci. J'utilise MS SQL 2005

Répondre

4
select t1.callid, t1.segstart, t1.calling_pty 
from MyTable t1 
inner join MyTable t2 on t1.calling_pty = t2.calling_pty 
    and t1.segstart < t2.segstart 
where datediff(mi, t1.segstart, t2.segstart) <= 5 --a difference of 5 minutes 59 secs. still returns 5 

Notez que depuis DATEDIFF compte nombre de limites de date franchie, il peut être un peu approximative en comptant minutes. Pour une meilleure précision, vous pouvez utiliser

where datediff(s, t1.segstart, t2.segstart) <= 300 --this looks at difference in seconds, so much nmore accurate 
+0

Impressionnant cela fonctionne presque! La chose étrange est le premier résultat apparaît également comme le dernier est donc un doublon. – CodingIsAwesome

+0

@CodingIsAwesome: essayez de changer '<>' en '<'. – RedFilter

+0

Réponse parfaite merci! – CodingIsAwesome