比较并根据月份将新数据插入表中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较并根据月份将新数据插入表中相关的知识,希望对你有一定的参考价值。
我有FM_TBL表,其中month_id列是数字数据类型,日期以“YYYYMM”格式存储在此。
我想比较上个月和当月的数据,并根据此数据找出当前月份插入FM_TABLE的新行数。
答案
你可以使用减号
select SYS_DB_NAME, ENTITY_ID, MONTH_ID
from my_table
where MONTH_ID = to_char(sysdate, 'YYYY') || lpad( extract(month from sysdate), 2,'0')
minus
select SYS_DB_NAME, ENTITY_ID, MONTH_ID
from my_table
where MONTH_ID = to_char(sysdate, 'YYYY') || lpad( (extract(month from sysdate) -1) , 2,'0')
如果你需要行内容
select * from my_table m
inner join (
select SYS_DB_NAME, ENTITY_ID, MONTH_ID
from my_table
where MONTH_ID = to_char(sysdate, 'YYYY') || lpad( extract(month from sysdate), 2,'0')
minus
select SYS_DB_NAME, ENTITY_ID, MONTH_ID
from my_table
where MONTH_ID = to_char(sysdate, 'YYYY') || lpad( (extract(month from sysdate) -1) , 2,'0')
) T on m.SYS_DB_NAME = t.SYS_DB_NAME
AND m.ENTITY_ID = t.ENTITY_ID
AND m.MONTH_ID = t.MONTH_ID
如果你只需要数数
select count(*) from
inner join (
select SYS_DB_NAME, ENTITY_ID, MONTH_ID
from my_table
where MONTH_ID = to_char(sysdate, 'YYYY') || lpad( extract(month from sysdate), 2,'0')
minus
select SYS_DB_NAME, ENTITY_ID, MONTH_ID
from my_table
where MONTH_ID = to_char(sysdate, 'YYYY') || lpad( (extract(month from sysdate) -1) , 2,'0')
) T
另一答案
你可以使用not exists
:
select count(*)
from fm_tbl t
where t.monthid = to_char(sysdate, 'YYYYMM') and
not exists (select 1
from fm_tbl t2
where t2.monthid = to_char(sysdate - interval '1' month, 'YYYYMM') and
t2.cust_srcid = t.cust_srcid
);
如果客户可以在给定的月份重复,那么使用count(distinct cust_srcid)
。
以上是关于比较并根据月份将新数据插入表中的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 ASP.net 网站将新条目插入 Access db 表?
如何编写 AWS Glue 脚本以将新数据插入 Redshift 表