2017-05-18 8 views
0

ストリークデータを取得するのを手伝ってください。私は sqliteで最も長いストリークを見つける

Select dt, (select count(*) from test as t1 where t1.dt < t2.dt and datediff(t2.dt,t1.dt) =1) as str 
from test as t2 

のMySQL

でこれを試してみました

Dt   str 
2017-01-01 0 
2017-01-02 1 
2017-01-03 2 
2017-02-10 0 
2017-02-15 0 
2017-02-16 1 
2017-02-17 2 
2017-02-18 3 

それが取得することはできました目標の達成

表テスト

DT

2017-01-01 
2017-01-02 
2017-01-03. //3 days end of streak 
2017-02-10 // 1 day 
2017-02-15 
2017-02-16 
2017-02-17 
2017-02-18 //4 days 

のテーブルを持っています何かこのようなg

Dt.  Str 
2017-01-03 3 
2017-02-10 1 
2017-02-18 4 

そして、それを最大にしますか?

+0

すべてのカレンダーの日付を保持するデータベースに 'dates'テーブルがありますか? –

+0

Vkp、いいえ私は –

答えて

1

現在の行の日付から行番号(つまり、行の数)を減算して、1日の差のある連続する行を同じグループに分類できます。次に、カウントを計算するのは単なるグループ化操作です。

select max(dt) as dt, count(*) as streak 
from (select t1.dt 
     ,date(t1.dt,-(select count(*) from t t2 where t2.dt<=t1.dt)||' day') as grp 
     from t t1 
    ) t 
group by grp 

グループの割り当て方法を確認するには、内部クエリを実行します。

+0

ありがとうvkp、you r genious !!!!それはまさに私が望む100パーセントです!あなたは私を救いました! –

関連する問題