2017-04-07 12 views
1

フォーク、SQLスクリプトを使用して時間ディメンションを移入する - Teradata

時間ディメンション表にSQLスクリプトを挿入しようとしています。

次のようなものが出力されます。以下

enter image description here

&正しい出力を与えていない部分SQLスクリプトです。

SEL calendar_date AS DATE_, 
     RANK() OVER (ORDER BY calendar_date) AS Date_Key, 
     RANK() OVER (ORDER BY EXTRACT(MONTH FROM CALENDAR_DATE)) AS Month_Key 
FROM SYS_CALENDAR.CALENDAR 
ORDER BY calendar_Date 

私のコードで問題を見つけるのを助けてください。コードはMonth_Key人口でstuckedているように、私はremaingコードで行われていないのです

...

+0

を持っているとき、私は間違っている、正確にどのようなこのためのポイントが表示されませんか?ランクをスキップしたり、何か他のことを心配していますか? – Andrew

答えて

0

変更RANK() OVER (ORDER BY EXTRACT(MONTH FROM CALENDAR_DATE)) AS Month_Keyそれは同じを持つべき年の月のすべての行のように見えるようDENSE_RANKを使用しますキー。

SEL calendar_date AS DATE_, 
    RANK() OVER (ORDER BY calendar_date) AS Date_Key, 
    DENSE_RANK() OVER (ORDER BY EXTRACT(YEAR FROM CALENDAR_DATE),EXTRACT(MONTH FROM CALENDAR_DATE)) AS Month_Key 
FROM SYS_CALENDAR.CALENDAR 
ORDER BY calendar_Date 
1

あなたはsys_calendar.calendar

select  calendar_date 

      ,day_of_calendar  - 32872  as day_key 
      ,month_of_calendar - 1080  as month_key 
      ,quarter_of_calendar - 360  as quarter_key 
      ,year_of_calendar - 1989  as year_key 

from  sys_calendar.calendar 

-- where  calendar_date between date '2015-09-25' and date '2015-10-05' 

-- order by calendar_date 

+---------------+---------+-----------+-------------+----------+ 
| calendar_date | day_key | month_key | quarter_key | year_key | 
+---------------+---------+-----------+-------------+----------+ 
| 2015-09-25 | 9,399 |  309 |   103 |  26 | 
| 2015-09-26 | 9,400 |  309 |   103 |  26 | 
| 2015-09-27 | 9,401 |  309 |   103 |  26 | 
| 2015-09-28 | 9,402 |  309 |   103 |  26 | 
| 2015-09-29 | 9,403 |  309 |   103 |  26 | 
| 2015-09-30 | 9,404 |  309 |   103 |  26 | 
| 2015-10-01 | 9,405 |  310 |   104 |  26 | 
| 2015-10-02 | 9,406 |  310 |   104 |  26 | 
| 2015-10-03 | 9,407 |  310 |   104 |  26 | 
| 2015-10-04 | 9,408 |  310 |   104 |  26 | 
| 2015-10-05 | 9,409 |  310 |   104 |  26 | 
+---------------+---------+-----------+-------------+----------+ 
+0

基本的には、TeradataとSQL Serverにも役立つSQLスクリプトを使用して時間ディメンションを作成しようとしています(ただし、スクリプトでは軽微な構文変更が必要になることがあります)。列から数値を引く?例: - day_of_calendar - 32872 as day_key – Aditya

+0

Teradataカレンダーテーブルは、1900-01-01から開始します。差し引きは、それを照会された結果と照合するためのものです –

関連する問題