2016-10-24 3 views
0

日付ギャップなしで最長と最新のストリークを計算することができます。日付ギャップなしで最長の最新ストーキングを計算する方法

Date  Result Value 
2014-01-14 W 1800 
2014-10-08 L 900 
2014-10-17 L 900 
2015-04-15 L 900 
2015-07-23 W 1800 
2016-01-04 L 900 
2016-05-31 L 195 
2016-06-01 W 6351 
2016-06-02 W 10500 
2016-06-03 L 312 
2016-06-14 W 14091 
2016-06-27 W 3360 
2016-07-11 W 4320 
2016-07-12 W 55596 
2016-07-13 W 14403 
2016-08-04 W 86399 
2016-09-13 L 356 
2016-10-09 W 86399 
2016-10-10 W 177178 
2016-10-18 W 86399 
2016-10-19 W 86399 

OUTPUT

Streak Total RecordType 
    2 172798 Latest    //Comments (2016-10-18,2016-10-19) 
    3 74319 Longest   //Comments(2016-07-11,2016-07-12,2016-07-13) 

答えて

4

あなたは日からインクリメント数を減算することにより、ストリークを識別することができます:私は、私はこのようなテーブル構造を持つSQL Server 2008を使用しています。これが一定であれば、あなたは連勝を持っている:

select min(date) as winning_streak_start, count(*) as num_days, sum(value) as total 
from (select t.*, dateadd(day, -row_number() over (order by date), date) as grp 
     from t 
     where result = 'W' 
    ) t 
group by grp; 

あなたが最も長いと最新のを取得するためにこれを使用することができます:

with t as (
     select min(date) as winning_streak_start, count(*) as streak, sum(value) as total 
     from (select t.*, dateadd(day, -row_number() over (order by date), date) as grp 
      from t 
      where result = 'W' 
      ) t 
     group by grp 
    ) 
select t.* 
from ((select top (1) streak, total, 'Longest' as RecordType 
     from t 
     order by streak desc 
    ) union all 
     (select top (1) streak, total, 'Latest' 
     from t 
     order by winning_streak_start desc 
    ) 
    ) t; 
関連する問題