2010-12-08 27 views
0

J'ai essayé mais je ne suis pas en mesure de comprendre cela. J'ai une table transactions (transaction_ID, transaction_Person_ID, Transaction_Date etc). Ce que je veux, c'est renvoyer tous les ID de transaction_person_id qui ont plus de 3 transactions par semaine pour la dernière année. Cela signifie que je dois vérifier pour 1-1-10 à 7-10-10 pour voir si quelqu'un a eu plus de 3 transactions cette semaine, puis pour 2-1-10 à 8-10-10 etc etc Ce que j'ai écrit est jusqu'à présent cetteT-SQL Sélectionner les résultats de retour pour une période de temps

WITH Dates AS (
     SELECT 
     [Date] = CONVERT(DATETIME,'01/01/2010') 
     UNION ALL SELECT 
     [Date] = DATEADD(DAY, 1, [Date]) 
     FROM 
     Dates 
     WHERE 
     Date < '12/31/2010' 
) 

SELECT transaction_person_Id FROM transactions 
JOIN DATES 
ON transactions.transaction_date = dates.date 
where transactions.Transaction_Date between dateadd(DAYOFYEAR,-7,dates.date) and dates.date 
group by transaction_person_Id 
having count(transaction_person_ID) >= 4 
OPTION (MAXRECURSION 2000) 

Merci

Répondre

0

Je n'ai pas une instance de ms-sql à la main au moment, donc je ne peux pas tester ce mais il devrait faire ce que vous voulez une fois que les erreurs de syntaxe inévitables ont été corrigés

select 
    transaction_person_ID 
from 
(
    select 
     transaction_person_Id, 
     count(transaction_person_id), 
     datepart(wk,Transaction_date) 
    from 
     transactions 
    Where 
     Transaction_date > dateadd(d,-datepart(dy,getdate())+1,getdate()) 
    group by 
     transaction_person_Id, 
     datepart(wk,Transaction_date) 
    having 
     count(transaction_person_id) >3 
) as foo 
group by 
    transaction_person_id 
having 
    count(transaction_person_id) >= datepart(wk,getdate) 

Hope that helps!