2013-02-12 2 views
0

Bon, voici le problème: J'ai un tableau avec des données horodatées. Supposons que la date est déjà retirée du timbre à date et la table ressemble à ceci:Obtenir des occurrences répétées dans une période dynamique

;WITH TRX(TRX_Id, TRX_SalesTotal, TRX_TimeStamp) AS 
    (
     SELECT 1, 100, '09:00:00' UNION ALL 
     SELECT 2, 100, '09:10:00' UNION ALL 
     SELECT 3, 200, '17:00:00' UNION ALL 
     SELECT 4, 999, '11:50:00' UNION ALL 
     SELECT 5, 999, '12:10:00' UNION ALL 
     SELECT 6, 999, '12:15:00' UNION ALL 
     SELECT 7, 100, '08:50:00' UNION ALL 
     SELECT 8, 600, '17:00:00' UNION ALL 
     SELECT 9, 700, '17:00:00' UNION ALL 
     SELECT 10, 100, '09:45:00' UNION ALL 
     SELECT 11, 100, '17:00:00' UNION ALL 
     SELECT 12, 777, '09:00:00' UNION ALL 
     SELECT 13, 777, '09:10:00' UNION ALL 
     SELECT 14, 777, '10:10:00' 
    ) 

Je dois faire rapport sur toutes les transactions où la valeur des ventes se produit plus de 2 fois en une heure. Dans une heure donnée. (Une telle période peut donc être de 12h30 à 13h30 pour un total de ventes et de 12h05 à 13h05 pour un autre total de ventes, selon les données.)

Le résultat pour les données ci-dessus doit donc être :

TRX_ID TRX_SalesTotal  TRX_TimeStamp 
1  100     09:00:00 
2  100     09:10:00 
7  100     08:50:00 
10  100     09:45:00 
4  999     11:50:00 
5  999     12:10:00 
6  999     12:15:00   

Toute aide serait grandement appréciée!

Répondre

0
SELECT TRX_Id, TRX_SalesTotal, TRX_TimeStamp 
FROM TRX TRX1 
WHERE (SELECT COUNT(*) 
     FROM TRX TRX2 
     WHERE TRX1.TRX_SalesTotal=TRX2.TRX_SalesTotal 
      AND 
      TRX1.TRX_TimeStamp BETWEEN DATEADD(hour, -1, TRX2.TRX_TimeStamp) 
             AND 
             DATEADD(hour, 1, TRX2.TRX_TimeStamp)) 
     >1 

Voir cette SQLFiddle

+0

Salut, Merci pour la réponse rapide. Votre solution regarde un intervalle de deux heures au lieu de 1 heure. Notez que les transactions avec les identifiants 12, 13 et 14 ne doivent pas être signalées. – Ann

+0

Vous devez réfléchir un peu plus au problème. Pour une transaction donnée, vous voulez le signaler si au moins un autre est à moins d'une heure de celui-ci. C'est à dire. 1 heure avant et 1 heure après. Le violon SQL renvoie l'ensemble de résultats que vous avez demandé. –

+0

Non, il doit uniquement signaler les transactions dont la valeur de vente est supérieure à DEUX fois par heure. (Pour mon exemple, j'ai utilisé deux, mais dans le problème réel, ce sera une variable et sera généralement beaucoup plus) – Ann

Questions connexes