まだ最適な解決策が見つからないため、この質問を再投稿しています。
患者の血液サンプル情報を取得するテーブルを設計しています。これには、患者 ID と収集日 (患者の血液サンプルが収集された日付) があります。
テーブルには、episode_number、episode_start_date、episode_end_date の 3 つの列が追加されています。エピソードは 30 日間の時間枠にすぎません。30 日以内に収集されたサンプルはすべて同じエピソードに属します。たとえば、患者が最初の血液サンプルを 2013 年 1 月 1 日に提出し、次の血液サンプルを 2013 年 1 月 19 日に提出したとします。両方の収集日が同じ「30 日ウィンドウ」内にあるため、同じ episode_number (エピソード 1) に属します。このエピソードの開始日は最初の収集日 (2013 年 1 月 1 日) になり、終了日は開始日 + 30 日 (2013 年 1 月 30 日) になります。この日付範囲内に収集された任意の数の患者の血液サンプルは、episode_number = 1 に属します。
同じ患者が 2013 年 2 月 4 日に別の血液サンプルを提出したとします。この収集日は episode_number = 1 の 30 日間のウィンドウの外にあるため、新しい episode_number (エピソード 2) に属します。このエピソードの開始日は 2013 年 2 月 4 日で、終了日は 30 日後、つまり 2013 年 3 月 2 日です。
以下の例のようなテーブルがあるとします。
------------------------------------------------------------------------------------------
Patient ID | Collection_Date | Episode_Number |Episode_Start_Date | Episode_End_Date |
1 | 2013-01-01 | | | |
1 | 2013-01-01 | | | |
1 | 2013-01-05 | | | |
1 | 2013-02-04 | | | |
1 | 2013-02-06 | | | |
1 | 2013-05-01 | | | |
1 | 2013-08-01 | | | |
-------------------------------------------------------------------------------------------
上記のテキストで説明したロジックに基づいて、episode_number、episode_start_Date、episode_end_date を入力するクエリが必要です。クエリの結果は、以下に示すテーブルの値を入力する必要があります。
----------------------------------------------------------------------------------------
Patient ID | Collection_Date |Episode_number |Episode_Start_Date| Episode_End_Date |
1 | 2013-01-01 |1 |2013-01-01 | 2013-01-30 |
1 | 2013-01-01 |1 |2013-01-01 | 2013-01-30 |
1 | 2013-01-05 |1 |2013-01-05 | 2013-01-30 |
1 | 2013-02-04 |2 |2013-02-04 | 2013-03-02 |
1 | 2013-02-06 |2 |2013-02-04 | 2013-02-04 |
1 | 2013-05-01 |3 |2013-05-01 | 2013-05-30 |
1 | 2013-08-01 |4 |2013-08-01 | 2013-08-30 |
----------------------------------------------------------------------------------------
覚えておくべきこと:
- エピソード = 30 日間の時間枠
- 最初のエピソードの開始日 = 最初の収集日
- 最初のエピソードの終了日 = 最初のエピソードの開始日 + 30 日
- 同じ 30 日間のウィンドウ内で収集されたすべてのサンプルは、同じエピソードに属します。
- いずれかのサンプルの収集日が前の収集のエピソード終了日より後の場合、それはエピソード開始日 = 収集日である新しいエピソードに属します。エピソードの終了日 = 開始日 + 30 日。
私の質問が明確に理解できることを願っています。私のテーブルには 300 万を超えるレコードがあるため、機能するソリューションだけでなく、最適なパフォーマンスを実現するソリューションも必要です。どんな助け/提案も大歓迎です。
前もって感謝します!
アシッシュ