2017-12-04 4 views
-2
  • テーブルには3つの列があります。 (1)ユーザID、(2)日付、(3)ステータス。
  • Xユーザーがいて、それぞれにステータスの同じ期間のログがあります。
  • ステータス(現在)は「アクティブ」またはヌルです。
  • 行に5つの「アクティブな」日がある場合や、それらの間に20日かかる場合があります。

私が達成しようとしている目標は、次のとおりです。ユーザーのステータスが「アクティブ」である日の、「ファントム」(または任意の他)として次の5つの日付のステータスを設定します。私は2つの角度から問題にアプローチしようとした行の値がX(SQLテーブル)の場合、次の5行の行の値を設定します。

UserID Date  Status 
000001 01-01-17 null 
000001 02-01-17 Active 
000001 03-01-17 Phantom 
000001 04-01-17 Phantom 
000001 05-01-17 Phantom 
000001 06-01-17 Phantom 
000001 07-01-17 null 
000001 08-01-17 null 
000001 09-01-17 Active 
000001 10-01-17 Phantom 

前:

UserID Date  Status 
000001 01-01-17 null 
000001 02-01-17 Active 
000001 03-01-17 null 
000001 04-01-17 null 
000001 05-01-17 null 
000001 06-01-17 null 
000001 07-01-17 null 
000001 08-01-17 null 
000001 09-01-17 Active 
000001 10-01-17 null 

後 は、a)のサイクルとして、それは前のX行以内かどうかをチェックします'アクティブ'の値が表示されます b)ステータスが「アクティブ」の行とその後のX行をテンポラリテーブルに選択して後で結合する場合

私はそれが "値Xが日付と日付+ Xの間に存在するかどうか"をチェックする方法でなければならないと考えていますが、これまでこれを達成できませんでした。

これを達成する方法について非常に感謝しますか? (MSSQL)

+2

これまでに試したことをお見せください。 SOは無料のコーディングサービスではありません。 –

+1

ようこそスタックオーバーフロー!純粋なコードの書き込み要求は、スタックオーバーフローに関するトピックではありません。ここでは特定のプログラミング問題に関連する質問がありますが、私たちはあなた自身で書くことを喜んで支援します! [あなたが試したこと](https://stackoverflow.com/help/how-to-ask)とあなたが立ち往生しているところを教えてください。これはまた、あなたの質問によく答えるのにも役立ちます。 – WhatsThePoint

+0

そのように見せていただき、ありがとうございましたことをお詫び申し上げます!非常にあなたの時間とアドバイスを感謝します。これまでにこのサービスを使って自分の質問をしたことはありません。私はそれがゴミと信じて混乱すると思うので、コードを追加することなくトピックを少し更新しました。 (私は試みた方法について説明し、代わりに潜在的な解決策と考えていました。)もちろん、必要に応じて行うこともできます。 –

答えて

0

最終的に解決策を見つけることができました。 2つのステップ。まず、アクティブな状態の行だけを置くテンポラリテーブル(#active_dates)を作成します。次に、次のスクリプトを実行します。

update table_name 
set  status='Phantom' 
from  #active_dates as a 
where a.userid=table_name.userid and 
     (table_name.[date] between a.[date] and dateadd(day,5,a.[date])) and 
     (table_name.status is null) 

ここで、5は「アクティブ」の後の行の数だけです。更新する必要があります。

お読みいただきありがとうございます。 :)

+0

公平な溶液。 ** AFTER **の例ではエラーが発生していることに注意してください。最後のレコード( '10-01-17')は' Phantom'で、 'null'ではありません。 – FDavidov

+0

あなたはそれに気づいていただきありがとうございます。 –

関連する問題