毎回最小日付をチェックして30日を追加し、それに応じてフィールドを設定する必要があります。例についてはどのように各観測および更新フラグの最小日付を動的に確認する
:
マイ表:
ID StartDate EndDate
1 2017-01-01 2017-02-01
1 2017-01-09 2017-01-28
1 2017-04-01 2017-04-30
1 2017-04-05 2017-05-20
1 2017-04-20 2017-06-12
2 2017-06-02 2017-06-20
2 2017-06-14 2017-07-31
2 2017-06-14 2017-07-31
2 2017-06-19 2017-07-31
2 2017-06-19 2017-07-31
はそう、ここで分(STARTDATE)が2017年1月1日です。今私はそれに30日を追加し、私のルックアップの日付は2017-01-31です。開始日がこの検索日よりも短いレコードについては、flag_1を設定する必要があります。
私のテーブルには、次のようになります。今、私は私の分の開始日の.so日(2017年1月31日)を調べ、前よりも大きく、次の最小STARTDATEを探す必要が
ID StartDate EndDate flag
1 2017-01-01 2017-02-01 flag_1
1 2017-01-09 2017-01-28 flag_1
1 2017-04-01 2017-04-30 null
1 2017-04-05 2017-05-20 null
1 2017-04-20 2017-06-12 null
2 2017-06-02 2017-06-20 null
2 2017-06-14 2017-07-31 null
2 2017-06-14 2017-07-31 null
2 2017-06-19 2017-07-31 null
2 2017-06-19 2017-07-31 null
は2017になります-04-01。今私はそれに30日を追加し、新しいルックアップ日は 2017-05-01です。新しいルックアップ開始日2017-05-01よりも前で、前回のルックアップ日(2017-01-31)よりも古いすべてのレコードについて、フラグはflag_2になり、同じIDの最後のレコードに到達するまで同じIDで点灯しますID。私はコードの下で、レコードの最初のセットを取得するが、ループ内でこれを有し、かつ動的に更新フラグを持つと考えることができないことができ
ID StartDate EndDate flag
1 2017-01-01 2017-02-01 flag_1
1 2017-01-09 2017-01-28 flag_1
1 2017-04-01 2017-04-30 flag_2
1 2017-04-05 2017-05-20 flag_2
1 2017-04-20 2017-06-12 flag_2
2 2017-06-02 2017-06-20 flag_1
2 2017-06-14 2017-07-31 flag_1
2 2017-06-14 2017-07-31 flag_1
2 2017-06-19 2017-07-31 flag_1
2 2017-06-19 2017-07-31 flag_1
:
私のファイナルテーブルは次のようになります。
select a.*,'flag_1' as flag from table a
join
(select cast(min(startdate) as date) as minstartdate,cast(dateadd(day,30,min(startdate)) as date) as maxstartdate,ID from table
group by ID) adate
on cast(adate.maxstartdate as date)> cast(a.startdate as date)
and adate.id=a.id
where a.id=1
order by startdate
誰でもこのロジックを教えてもらえますか?
パーフェクト!これは私が探していたものです。私の要件にはいくつかのネストされたループもあります。しかし、この論理を入れ子にしてみようとしましょう。おかげでブライアンブライアン – chits
あなたは大歓迎です。 WHILEループはかなり簡単に入れ子にする必要がありますが、私はそれを試みることは決してありませんでした。 – Brian