2013-07-10 54 views
0

當我嘗試總結特定時間範圍內的出現次數時,我有以下問題。在我的表格範圍內計算出現次數

比方說,我有如下表:

 Date    New 
    2013-01-01   1 
    2013-01-01   0 
    2013-01-01   0         
    2013-01-01   1 
    2013-01-02   1 
    2013-01-02   0 
    2013-01-03   1 
    2013-01-03   1 
    2013-01-04   0 
    2013-01-04   1 
    2013-01-05   1 

,我想算,每兩天發生的「新」的數量。

在上面提供,結果我會期望得到會是如下的例子:

 Date     Result 
    2013-01-01/02   3 
    2013-01-02/03   3 
    2013-01-03/04   3 
    2013-01-04/05   2 

在那裏你可以看到,我指望每兩天發生出現的次數。

請注意,我正在使用一張大桌子(> 10米線),我需要生成> 50個不同的範圍(考慮每個2天的範圍作爲範圍)。

我正在使用SQL Server 2012.

在此先感謝您的幫助!

回答

1

以下是一種聚合數據一次然後使用窗口函數進行計算的方法。計算只是增加了先前的值,當以前的日期比當前日期少一個:

select date, 
     (cnt + (case when DATEDIFF(day, prevdate, date) = 1 then prevcnt else 0 end)) as Result 
from (select date, SUM(new) as cnt, 
      lag(DATE) over (order by date) as prevdate, 
      lag(SUM(new)) over (order by date) as prevcnt 
     from t 
     group by date 
    ) t 
1

戈登·利諾夫的回答是SQL 2012更好,但我想我會採取刺傷的替代方案,將在以前的版本中工作,因爲這是一個有趣的問題。

SELECT #table1.[Date], (SUM(new) + t.cnt2) AS cnt 
FROM #table1 
INNER JOIN (SELECT [Date], SUM(new) AS cnt2 
      from #table1 
      GROUP BY #table1.[date]) t ON #table1.[date] = t.[date]-1 
GROUP BY #table1.[date], t.cnt2