私は、業界のタスクでよく知られている問題を解決して、一定の期間連続して活動しているCustIDをIDで識別し、契約間の休憩をほとんど許しています。SQL Server:継続的な登録でCustを見つけよう
私はこの日にアクティブな場合は、以下のスニペットのように、以下のスニペットのように最初に部分的に行列テーブルを作成しました。これは、契約が重複する可能性があるため、これを行う唯一の信頼できる方法です。
私はcontアクティビティのCustIDが1/0であるかどうかを確認する必要があります。これを追跡する方法を説明します。私の例では3日間の休憩がありますが、それらの日が次々と続くことを確かめてください。
私はこれをうまくやり遂げることができますか、あなたの助けとリードに感謝します。私はいくつかの例を見ましたが、彼らはSASでやったので理解しにくいです。
declare @maxBreak int = 3 -- 3 days max allowed for continuse contract
declare @PeriodStart date = '2015-1-11', @PeriodEnd date = '2015-1-19';
;with matrix_dd as
(
select *
from
(select 111 CustID, '2015-1-11' dd, 1 Active union
select 111 CustID, '2015-1-12' dd, 0 Active union
select 111 CustID, '2015-1-13' dd, 0 Active union
select 111 CustID, '2015-1-14' dd, 0 Active union
select 111 CustID, '2015-1-15' dd, 1 Active union
select 111 CustID, '2015-1-16' dd, 1 Active union
select 111 CustID, '2015-1-17' dd, 1 Active union
select 111 CustID, '2015-1-18' dd, 1 Active union
select 111 CustID, '2015-1-19' dd, 0 Active union
select 111 CustID, '2015-1-20' dd, 0 Active) a
)
select *
from matrix_dd
ベスト M
実際には以下のようなことが成立しました。 (アクティブ、3)OVER(パーティションCustID ORDER BY dd)、 SUM(アクティブ)OVER(PARTITION BY CustID ORDER BY dd)= LAG(アクティブ、3)OVER(CustID BY ORDER BY dd)次に '3 days off' else '' end YN alpha..matrix_dd CustID、ddによる注文 –