【问题标题】:How to make time dimension in netezza?如何在netezza中制作时间维度?
【发布时间】:2014-09-25 07:02:30
【问题描述】:

我找到了一个构建时间维度的示例 sql,我从这个链接得到 https://gist.github.com/johngrimes/408559

mysql 一切都很完美,

但是,当我在netezza中尝试时,代码无法正常工作,出现一些错误,例如“expecting USING' or')'' or '',''”等

我试过修改

CREATE TABLE numbers_small (number INT);
INSERT INTO numbers_small VALUES (0);
INSERT INTO numbers_small VALUES (1);
INSERT INTO numbers_small VALUES (2);
INSERT INTO numbers_small VALUES (3);
INSERT INTO numbers_small VALUES (4);
INSERT INTO numbers_small VALUES (5);
INSERT INTO numbers_small VALUES (6);
INSERT INTO numbers_small VALUES (7);
INSERT INTO numbers_small VALUES (8);
INSERT INTO numbers_small VALUES (9);

CREATE TABLE numbers (number BIGINT);
INSERT INTO numbers
SELECT thousands.number * 1000 + hundreds.number * 100 + tens.number * 10 + ones.number
  FROM numbers_small thousands, numbers_small hundreds, numbers_small tens, numbers_small ones
LIMIT 1000000;



CREATE TABLE D_TIME_DAILY_TES (
  TIME_ID          BIGINT PRIMARY KEY, 
  TANGGAL             DATE NOT NULL,
  TAHUN             INT NOT NULL,
  BULAN            CHAR(10) NOT NULL,
  HARI      CHAR(10) NOT NULL,
  LAST_UPDATE timestamp NOT NULL,
  constraint D_TIME_DAILY_TES UNIQUE KEY (TANGGAL)
);


INSERT INTO D_TIME_DAILY_TES (TIME_ID, TANGGAL, LAST_UPDATE)
SELECT number, DATE_ADD( '2010-01-01', INTERVAL number DAY ), CURRENT_TIMESTAMP
  FROM numbers
  WHERE DATE_ADD( '2010-01-01', INTERVAL number DAY ) BETWEEN '2014-01-01' AND '2014-12-31'
  ORDER BY number;


UPDATE D_TIME_DAILY_TES SET
  HARI = DATE_FORMAT( TANGGAL, "%W" ),
  BULAN =       DATE_FORMAT( TANGGAL, "%M"),
  TAHUN =        DATE_FORMAT( TANGGAL, "%Y" ),
  LAST_UPDATE = CURRENT_TIMESTAMP;

但还是不行:(

我该如何解决?

【问题讨论】:

    标签: mysql sql netezza


    【解决方案1】:

    从语法的角度来看,我发现您的代码存在两个问题。

    首先是在 D_TIME_DAILY_TES 表的创建中。

    去掉 tanggal 上的唯一键约束,就可以正常运行了。

    CREATE TABLE D_TIME_DAILY_TES
       (
          TIME_ID BIGINT PRIMARY KEY,
          TANGGAL DATE NOT NULL,
          TAHUN   INT NOT NULL,
          BULAN   CHAR(10) NOT NULL,
          HARI    CHAR(10) NOT NULL,
          LAST_UPDATE TIMESTAMP NOT NULL
       );
    

    第二个是在 INSERT 中填充同一张表。 DATE_ADD 不需要将整数添加到日期,并且确实不存在。您可以改用此表格。请注意,此插入实际上会失败,因为我们只插入三列,而您为 D_TIME_DAILY_TES 定义的所有列都不是 NULL,因此您还需要修复它。

      INSERT INTO D_TIME_DAILY_TES
         (
            TIME_ID,
            TANGGAL,
            LAST_UPDATE
         )
      SELECT           NUMBER,
         '2010-01-01'::DATE + NUMBER,
         CURRENT_TIMESTAMP
      FROM numbers
      WHERE '2010-01-01'::DATE + NUMBER BETWEEN '2014-01-01'::DATE AND '2014-12-31'::DATE
      ORDER BY NUMBER;
    

    【讨论】:

      猜你喜欢
      • 2015-02-26
      • 1970-01-01
      • 2018-03-25
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      相关资源
      最近更新 更多