2016-09-12 28 views
0

私は、予定日のPersonIDと、訪問後にフォローアップコールが行われたかどうかを示す表を記入しようとしています。Row_Number日付範囲

Tbl_Appt

PersonID  Appt_Date 
    1   1/1/2016 
    1   1/3/2016 
    1   1/9/2016 
    1   1/31/2016 

Tbl_Call

PersonID  Call_Date 
    1   1/5/2016 
    1   2/1/2016 

目的のテーブル:Tbl_FollowUp

PersonID  Appt_Date Follow_Up_Flag 
    1   1/1/2016 N 
    1   1/3/2016 Y 
    1   1/9/2016 N 
    1   1/31/2016 Y 

Tbl_Call.Call_Dateである場合Tbl_FollowUp.Follow_Up_Flagが> = YであるTbl_Appt.Appt_Dateと前次のappt。

私はRow_Number/Partitionを使用すると仮定しますが、これらの関数は私の前の記事を参照しています。

ありがとうございます!

+0

ご希望の出力が間違っているようです。なぜ2011年1月3日にYがあるのですか? – Kostya

+3

これは最初のSQLの質問ではないので、使用しているデータベースを常に指定することが非常に重要であることを今すぐに知っておく必要があります。 SQLサーバー?そしてもしそうなら、どのバージョン?利用可能なウィンドウ機能を決定することができます。 – sstan

+0

@Kostya - 1/5は1/3と1/9の間であり、シーケンシャルレコードを比較するためです。 – sgeddes

答えて

1

極めて容易ではありませんが、あなたが、その後、ここleadを使用してオプションですwindow functionsなどrow_numberなどへのアクセス権を持っていると仮定し、outer join

select a.personid, a.appt_date, 
    case when c.personid is null then 'N' else 'Y' 
    end as follow_up_flag 
from (
     select personid, 
     appt_date, 
     lead(appt_date) over (partition by personid order by appt_date) next_appt_date 
     from tbl_appt 
) a left join tbl_call c on c.personid = a.personid and 
      c.call_date > a.appt_date and 
      (c.call_date < a.next_appt_date or a.next_appt_date is null) 
order by a.appt_date 
+0

これは素晴らしいことです!私が変更しなければならなかった唯一のことは、Follow_Up_Flagでした.c.call_dateがnullで、 'N' else 'Y'である場合 end to follow_up_flag :) – CurlieQ1034