2013-09-24 76 views
2

我想繪製一段時間內連接其Twitter用戶的用戶百分比。用戶數量不斷變化,連接其Twitter賬戶的用戶數量也在不斷變化。從MSSQL查詢日期範圍內的運行百分比?

該表具有用戶帳戶特定的createDateTime列以及tw_connectDateTime列。

假設我對過去7天的連接趨勢感興趣。有沒有一種方法可以讓MSSQL計算指定範圍內每天的百分比,還是我需要使用多個查詢自己完成?

在應用程序邏輯做它看起來像(僞):

for day in days: 
    query: 
     select 
      count(userId) as totalUsers 
      ,c.connected 
      ,cast(c.connected as float)/count(userId) as percentage 
     from 
      Users 
      outer apply ( 
       select 
        count(userId) as connected 
       from 
        Users 
       where 
        tw_connectDateTime <= $day 
      ) as c 
     where 
      createDateTime <= $day 
     group by 
      c.connected 

什麼我不能確定的是怎樣的,如果有可能,要擴展爲每天運行,這樣的結果請將日期包含在列中,並將相同的值作爲範圍中每個日期的上述查詢的運行結果。

可能嗎?如果是這樣,怎麼樣?

回答

1

其實你可以用你的查詢加入了與天,像這樣:

with cte_days as (
    select @DateStart as day 
    union all 
    select dateadd(dd, 1, c.[day]) as [day] 
    from cte_days as c 
    where c.[day] < @DateEnd 
) 
select 
    d.[day], 
    count(u.userId) as totalUsers, 
    c.connected, 
    cast(c.connected as float)/count(u.userId) as percentage 
from cte_days as d 
    inner join Users as u on u.createDateTime <= d.[day] 
    outer apply ( 
     select 
      count(T.userId) as connected 
     from Users as T 
     where T.tw_connectDateTime <= d.[day] 
    ) as c 
group by d.[day], c.connected 
+0

試圖運行本作,是找來:「無效的對象名稱:‘cte_days’」交換了cte_days和cte_numbers的順序,並得到「無效的對象名稱:'cte_numbers'。」另外,我需要能夠計算任意一組天數,而不僅僅是最近的(getDate() - N)。 –

+0

@AdamTuttle更新了查詢。你想在哪裏得到你任意設定的日子?如果這在臨時表中,您可以刪除所有cte_ ..並加入此臨時表(或表變量) –

+0

這是要在儀表板中繪製的圖形,並且儀表板允許選擇所有數據的日期範圍可視化,包括此圖。 –