日付列[LogDate]
(ログされているとき)、ステータス列[Status]
(たとえば0と1)、およびユーザーID [ユーザーID]のレコードセット(例:TableA
)同じユーザーに対して、異なる日付で同じステータスのレコードが少なくなることがあります。SQL Server:グループ化された結果の計算
最初の日付からstatus = 0にログされてから最初のステータスが各ユーザーの= 1だったので(その時間の合計を得ることができるように)、時間差(すべてのユーザー)にしたい。私はそれができると確信しています、私はちょうど行き止まりの通りに入っています。私は任意のアイデアに感謝しますので、私は...データの
例に移動することができます。
UserId LogDate Status
--------------------------
1 01/01/2016 1
1 02/01/2016 1
1 07/01/2016 1
1 10/01/2016 0
1 11/01/2016 1
1 12/01/2016 0
2 01/01/2016 1
2 02/01/2016 1
2 07/01/2016 0
2 10/01/2016 0
2 11/01/2016 1
2 12/01/2016 0
を私はユーザーID = 2のためのユーザーID = 1と6日間、9日間の結果を得ることを期待しますそれらの合計を得ることは簡単なようです。
ユーザID 1の日数の計算:ステータス= 1の最初のレコードは10/01/2016にあり、ステータス= 0の最初のレコードは01/01/2016です。
select userId,
max(case when seqnum = 1 and status = 0 then logDate end) as logDate_0,
max(case when seqnum = 1 and status = 1 then logDate end) as logDate_1
from (select t.*,
row_number() over (partition by userId, status order by logDate) as seqnum
from t
) t
group by userId;
あなたの質問に答えて、サンプルデータと望ましい結果を提供してください。 –
どのように9日間カウントしますか?見せてください。 – NEER