sql求同期数据怎么写源代码在下

select '日期:'||substr(t1.time,1,4)||'.'||substr(t1.time,5,2) time,

       t1.PROD_CLASS_NAME,

       t1.月实际,

       t2.月预算

from

(select YEAR || MONTH AS TIME,PROD_CLASS_NAME,PROCESSING_COST 月实际

from MAMC00.T_ADS_SRV_JYAC_0004

where YEAR || MONTH =(SELECT MAX(YEAR || MONTH)FROM MAMC00.T_ADS_SRV_JYAC_0004

where 1=1

${if(len(COMPANY_NAME) == 0,"","and COMPANY_NAME = '" + COMPANY_NAME + "'")}

)

${if(len(COMPANY_NAME) == 0,"","and COMPANY_NAME = '" + COMPANY_NAME + "'")}

group by YEAR ||MONTH,PROD_CLASS_NAME,PROCESSING_COST)t1

left join

(

select YEAR || MONTH AS TIME,PROD_CLASS_NAME,PROCESSING_COST 月预算

from MAMC00.T_ADS_SRV_JYAC_0007

where YEAR || MONTH =(SELECT MAX(YEAR || MONTH)FROM MAMC00.T_ADS_SRV_JYAC_0007

where 1=1

${if(len(COMPANY_NAME) == 0,"","and COMPANY_NAME = '" + COMPANY_NAME + "'")}

)

${if(len(COMPANY_NAME) == 0,"","and COMPANY_NAME = '" + COMPANY_NAME + "'")}

group by YEAR ||MONTH,PROD_CLASS_NAME,PROCESSING_COST

) t2 on t1.time=t2.time

yaaa 发布于 2022-3-2 18:08
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
CD20160914Lv8专家互助
发布于2022-3-2 20:39(编辑于 2022-3-2 21:20)

你现在是求了数据库的表里面最大年月的数据。那你得到后。。。。最大年月后。还要把它限制为去年的同期。。。不知道你是什么数据库,,我以oracle中来写类似如下

image.png

select '日期:'||substr(t1.time,1,4)||'.'||substr(t1.time,5,2) time,

       t1.PROD_CLASS_NAME,

       t1.月实际,

       t2.月预算

from

(select YEAR || MONTH AS TIME,PROD_CLASS_NAME,PROCESSING_COST 月实际

from MAMC00.T_ADS_SRV_JYAC_0004

where YEAR || MONTH =(SELECT MAX(YEAR || MONTH)FROM MAMC00.T_ADS_SRV_JYAC_0004

where 1=1

${if(len(COMPANY_NAME) == 0,"","and COMPANY_NAME = '" + COMPANY_NAME + "'")}

)

${if(len(COMPANY_NAME) == 0,"","and COMPANY_NAME = '" + COMPANY_NAME + "'")}

group by YEAR ||MONTH,PROD_CLASS_NAME,PROCESSING_COST)t1

left join

(

select YEAR || MONTH AS TIME,PROD_CLASS_NAME,PROCESSING_COST 月预算

from MAMC00.T_ADS_SRV_JYAC_0007

where YEAR || MONTH =(SELECT MAX(YEAR || MONTH)FROM MAMC00.T_ADS_SRV_JYAC_0007

where 1=1

${if(len(COMPANY_NAME) == 0,"","and COMPANY_NAME = '" + COMPANY_NAME + "'")}

)

${if(len(COMPANY_NAME) == 0,"","and COMPANY_NAME = '" + COMPANY_NAME + "'")}

group by YEAR ||MONTH,PROD_CLASS_NAME,PROCESSING_COST

) t2 on t1.time=t2.time

/*同期实际的数据*/

left join 

(

select YEAR || MONTH AS TIME,PROD_CLASS_NAME,PROCESSING_COST 月预算

from MAMC00.T_ADS_SRV_JYAC_0007

/*求出最大的年月后减100就是去年同期的了。如果不对,那么就是月份前面的0丢失。要转换*/

/*因为不知道你是什么数据库我没有转换。反正是这个思路。oracle中把数字转换成两位数*/

/*to_char(month,'fm00')*/

where YEAR || MONTH =(SELECT MAX(YEAR || MONTH)-100 FROM MAMC00.T_ADS_SRV_JYAC_0007

where 1=1

${if(len(COMPANY_NAME) == 0,"","and COMPANY_NAME = '" + COMPANY_NAME + "'")}

)

${if(len(COMPANY_NAME) == 0,"","and COMPANY_NAME = '" + COMPANY_NAME + "'")}

group by YEAR ||MONTH,PROD_CLASS_NAME,PROCESSING_COST

) t3 on t1.time=t3.time

  • yaaa yaaa(提问者) 我是DB2的数据库 为什么最大的年月后减100就是去年同期呀
    2022-03-03 08:49 
  • CD20160914 CD20160914 回复 yaaa(提问者) 202203 你说减多少是202103 你自己计算一下就知道了呀。因为你把年月拼一起没有其它符号就是一个数字了。。。
    2022-03-03 08:51 
  • CD20160914 CD20160914 回复 yaaa(提问者) db2也可用to_char函数的。。。很多语法和oracle是一样的。。。
    2022-03-03 08:53 
  • yaaa yaaa(提问者) 回复 CD20160914 那同期数据是不是应该用月实际数据的表减100啊 不能用预算的表减吧
    2022-03-03 08:54 
  • CD20160914 CD20160914 回复 yaaa(提问者) 我只是写实际的同期,你再加一个left join 写预算的-100就可以了。不记得db2是否会把前面的0去掉了。因为oralce会去掉。你可以测试看一下比如03.。在db2返回的时候是否没有前面的0,如果有就不用to_char函数了。
    2022-03-03 08:56 
  • 2关注人数
  • 372浏览人数
  • 最后回答于:2022-3-2 21:20
    请选择关闭问题的原因
    确定 取消
    返回顶部