2017-08-16 33 views
2

我有一個表,看起來像這樣:集結在SQL

Conversion_Date  User_Name  Last_Date_Touch  Touch_Count 
     7/15/2017    A   6/17/2017    1 
     7/16/2017    B   6/24/2017    2 
     7/19/2017    A   6/20/2017    1 
     7/19/2017    C   6/29/2017    1 

我想從每個Conversion_Date過去30天User_Name在SQL得到Touch_Count總和。

我首先想到的唯一事情是找出每個轉換日期的時間窗口,然後我不知道如何聚合這個來獲得最終結果。

首先,它是將低於30天的窗口:

Conversion_Date  User_Name  Last_Date_Touch  Touch_Count 30_Days_Ago 
     7/15/2017    A   6/17/2017    1  6/15/2017  
     7/16/2017    B   6/24/2017    2  6/16/2017 
     7/19/2017    A   6/20/2017    1  6/19/2017 
     7/19/2017    C   6/29/2017    1  6/19/2017 

然後,我需要這樣它看起來像這樣聚集吧:

Conversion_Date  User_Name  Last_Date_Touch  Touch_Count  SUM(Last30daysbyconversiondate) 
     7/15/2017    A   6/17/2017    1  5 
     7/16/2017    B   6/24/2017    2  5 
     7/19/2017    A   6/20/2017    1  4 
     7/19/2017    C   6/29/2017    1  4 

最後兩個分別爲4,因爲last_date_touch值2017/6/17不在2017年7月19日的30天窗口中,因此touch_count被排除在外,使得最後兩行中的總數爲4。

如果您知道如何在SQL中執行此操作,那麼任何幫助都會很棒。

謝謝!

回答

1

這應該是具有自獲得參加

select 
    a.User_Name 
    ,a.Conversion_Date 
    ,sum(b.Touch_Count) as SumOver30Days 
from 
    SomeTable a 
    left join 
     SomeTable b on 
     b.User_Name = a.User_name 
     --and b.Conversion_Date <= a.Conversion_Date 
     --and b.Conversion_Date >= dateadd(day,-30,a.Conversion_Date) 
     and cast(b.Conversion_Date as date) <= cast(a.Conversion_Date as date) 
     and cast(b.Conversion_Date as date) >= cast(dateadd(day,-30,a.Conversion_Date) as date) 
group by a.User_Name, a.Conversion_Date 
+1

我從來沒有想過做一個自我加入...天才。謝謝! –

+0

不用擔心@NickKnauer願意幫忙 – scsimon

+0

如果轉換日期列的形式爲'2017-07-15 01:34:29'這樣的時間戳,這樣的情況仍然會有效嗎? @scsimon –