T-SQL Select, возвращающий результаты за период времени - PullRequest
0 голосов
/ 08 декабря 2010

Я пытался, но я не могу понять это. У меня есть таблица транзакций (транзакция_ID, транзакция_Person_ID, Transaction_Date и т. Д.). Что я хочу, чтобы вернуть все транзакции_person_ID, которые имеют более 3 транзакций в неделю за последний год. Это означает, что я должен проверить от 1-1-10 до 7-10-10, чтобы увидеть, было ли у кого-то больше 3 транзакций на этой неделе, затем от 2-1-10 до 8-10-10 и т. Д. То, что я написал до сих пор, это

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)

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 декабря 2010

Взгляните на эту ссылку

http://www.sqlservercentral.com/articles/T-SQL/71571/

Возвращение строки Top X для каждой группы, Дэйв Баллантайн

0 голосов
/ 08 декабря 2010

В данный момент у меня нет экземпляра ms-sql, поэтому я не могу проверить это, однако он должен делать то, что вы хотите, как только неизбежные синтаксические ошибки были исправлены

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)

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...