需要在删除和插入模式下将最近 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 个月的数据存储在表中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用月份名称获取最近 3 个月的计数,如果该月份没有记录需要使用月份名称获取 0 [重复]