需要在删除和插入模式下将最近 5 个月的数据存储在表中

Posted

技术标签:

【中文标题】需要在删除和插入模式下将最近 5 个月的数据存储在表中【英文标题】:Need to store latest 5 months of data in a table on delete and insert mode 【发布时间】:2016-07-15 16:49:14 【问题描述】:

我尝试了一个需要将最近 5 个月的数据存储在 netezza 中的场景。下面是我尝试过的代码。但在那之后,我有了一个连贯的想法,并在那里解决了这个问题。

create table test(yermon int,number int);

insert into test values(201607,1);
insert into test values(201606,2);
insert into test values(201605,3);
insert into test values(201604,4);
insert into test values(201603,5);

然后,如果我在新的 yearmonth 插入一条新记录,我的以下逻辑就会起作用。

delete from test where  yermon in (select min(yermon) from test where no=5);
update test set no = no + 1;
insert into test values(201608,1);

但是如果我再次运行相同的两次。 201607会去存储两次,201603会删除。

我也需要一个删除和更新语句来包含这种情况。有人可以帮我解决这个问题。 提前致谢!

【问题讨论】:

你为什么需要number。您可以在选择中即时生成它 我只是简单地添加了编号供我参考。如果我们有解决方案,我们也可以删除它。 在 yermon 字段上创建主键 叫我老式的,但我宁愿保存date 我可以用这样的东西做日期数学。它不仅是 3 个字节 vs 6 个字节,而且还具有启动功能。 我运气不好,Netezza 没有主键概念。 【参考方案1】:

你可以试试这个吗?

CREATE TABLE `test` (
  year_month int(6),
  number int(11),
  PRIMARY KEY year_month
);

我找到了MERGE INTO statement,也许我错了,但测试一下:

MERGE INTO test AS dst USING test AS src ON (src.year_month=201608)
WHEN MATCHED THEN UPDATE SET dst.number = 1
WHEN NOT MATCHED THEN INSERT VALUES(201608, 1);

【讨论】:

是的,如果不存在则类似于 INSERT,如果存在则类似于 UPDATE。 PRIMARY KEY 或 UNIQUE KEY 约束有帮助。 REPLACE 在 Netezza 中有吗?我没有得到任何例子。 @Dileep 等一下,找例子 @Dileep 试试我的答案。 Netezza 根本不强制执行 UNIQUE 约束。

以上是关于需要在删除和插入模式下将最近 5 个月的数据存储在表中的主要内容,如果未能解决你的问题,请参考以下文章

kettle庖丁解牛第33篇之从上游抽取最近6个月的数据

如何在 Postgres 函数中存储日期变量?

如何使用月份名称获取最近 3 个月的计数,如果该月份没有记录需要使用月份名称获取 0 [重复]

在 BigQuery 中减去最近 3 个月的数据

如何根据 Power BI 报表中选定的月份筛选器在 MDX 查询中显示最近六个月的数据(每个月一行)?

获取按月分组的最近 12 个月的数据,即使为 0