データ ウェアハウスでも同様のことを行います。二段階の手術です。1 つは主キー フィールドのみを含む新しいレコードを追加する方法で、もう 1 つは新しいレコードの他のフィールドを更新する方法です。データベース エンジンは redbrick です。redbrick の構文は、SQL サーバーの構文に似ています。
これは挿入クエリです。
insert into period (date)
select
case when days_in_year((select max(date) from period))=365 -- current max year not leap year
and days_in_year(dateadd(day,1,(select max(date) from period)))=365 --new year not leap year
then dateadd(day,365,date)
else dateadd(day,366,date)end
from period
where date between
case when days_in_year(dateadd(day,1,(select max(date) from period)))=366 -- new year is leap year
or days_in_year((select max(date) from period))=366 -- current max year is leap year
then dateadd(day,-365, (select max(date) from period)) -- Dec 31 of year before current max year
else dateadd(day,-364, (select max(date) from period)) end --Jan 1 of current max year
and
case when days_in_year((select max(date) from period))=366 -- current max year is leap year
then dateadd(day,-1, (select max(date) from period))-- Dec 30 of current max year
else (select max(date) from period) end -- Dec 31 of current max year
and current_date > dateadd(month,-9,(select max(date) from period))
days_in_year は redbrick マクロであることに注意してください。この場合、SQL サーバーのユーザー定義関数と同等です。この赤レンガコードに相当します
extract(dayofyear from date(concat(datename(year,%1),'-12-31')))
ここで、%1 はマクロに渡される引数です。