gpt4 book ai didi

mysql - 如何在netezza中制作时间维度?

转载 作者:行者123 更新时间:2023-11-29 23:44:17 25 4
gpt4 key购买 nike

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

mysql 一切都很完美,

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

我尝试过修改

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;

但还是不行:(

我该如何解决这个问题?

最佳答案

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

第一个是创建表 D_TIME_DAILY_TES。

删除 TAGGAL 上的唯一键约束,它将正常运行。

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;

关于mysql - 如何在netezza中制作时间维度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26032555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com