比较并根据月份将新数据插入表中

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 表

如何查看sql server中代码创建的临时表?

如何将新值插入两个相关表?

Beyond Compare 3在比较HTML后,生成的报告中代码不换行

数据库表中不建索引,在插入数据时,通过sql语句防止重复添加