MYSQL求同比,看一下错在那里了

企业微信截图_16523413931068.pngSELECT  *  FROM 

(SELECT

P_BUKRS 公司,

STR_TO_DATE( CONCAT( P_YEAR, P_MONTH ), "%Y%m" ) 日期,

TEXT 类型,

NCS 年初 

FROM

zfit02 

WHERE

TEXT = ' 应收账款' 

)  YB 

LEFT  JOIN  

( SELECT

P_BUKRS 公司,

STR_TO_DATE( CONCAT( P_YEAR, P_MONTH ), "%Y%m" ) 日期,

TEXT 类型,

NCS 年初 

FROM

zfit02 

WHERE

TEXT = ' 应收账款' 

)  TB

ON  YB.公司=TB.公司   AND  YB.日期=date_sub(TB.日期 , interval 1  month) 

 SQL粘错了,问题是日期减去一月他不成功,关联就成空了

十万个小问题 发布于 2022-5-12 15:32 (编辑于 2022-5-12 15:44)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
dongazheLv6初级互助
发布于2022-5-12 15:38(编辑于 2022-5-12 15:55)

SELECT  *  FROM 

SELECT

P_BUKRS 公司,

STR_TO_DATE( CONCAT( P_YEAR, P_MONTH,'-01'), "%Y%m" ) 日期,

TEXT 类型,

NCS 年初 

FROM

zfit02 

WHERE

TEXT = ' 应收账款' 

) YB 

LEFT  JOIN  

SELECT

P_BUKRS 公司,

STR_TO_DATE( CONCAT( P_YEAR, P_MONTH,'-01'), "%Y%m" ) 日期,

TEXT 类型,

NCS 年初 

FROM

zfit02 

WHERE

TEXT = ' 应收账款' 

) TB

ON  YB.公司=TB.公司 AND YB.日期=date_format(date_sub(CONCAT(TB.日期,'-01'), interval 1 month),'%Y-%m');

最佳回答
0
LindaLv5见习互助
发布于2022-5-12 15:38

AND YB.日期=date_sub(TB.日期 , interval 1  month) 

最佳回答
0
CD20160914Lv8专家互助
发布于2022-5-12 15:48

SELECT  *  FROM 

(SELECT

P_BUKRS 公司,

CONCAT( P_YEAR,'-' ,P_MONTH,'-01' ) 日期,

TEXT 类型,

NCS 年初 

FROM

zfit02 

WHERE

TEXT = ' 应收账款' 

)  YB 

LEFT  JOIN  

( SELECT

P_BUKRS 公司,

CONCAT( P_YEAR,'-' ,P_MONTH,'-01' )  日期,

TEXT 类型,

NCS 年初 

FROM

zfit02 

WHERE

TEXT = ' 应收账款' 

)  TB

ON  YB.公司=TB.公司  AND  date_format(YB.日期,'%Y-%m')=date_format(date_sub(TB.日期 , interval 1  month) ,'%Y-%m')

最佳回答
0
shinger@126.comLv2见习互助
发布于2022-5-12 17:56(编辑于 2022-5-16 12:35)

你这求的是环比。同比是和上一年的数据对比,环比才是和上个月的数据对比。然后你不要用select *来返回数据,数据字段名重复了,帆软分不清改取哪个字段的数据,所以如果没有右表的数据,可能会直接给你返回NULL

然后就是,你的字段年和月是用的什么形式存储的?如果是整数型,2022和5这样,使用DATE_FORMAT(2022*10000+5*100+1,'%Y-%m')这种方式来得到2022-05格式的年月。如果是2022和05这样的字符串,DATE_FORMAT(CONCAT( '2022','05','01' ), '%Y-%m' )。以下代码假设你的年和月是用2022和05这样格式的字符串存储的脚本应该这么写。

;with YB as (        #本期

SELECT

P_BUKRS as 公司,

DATE_FORMAT(CONCAT( P_YEAR, P_MONTH,'01' ), "%Y-%m" ) as 日期,

TEXT as 类型,

sum(NCS) as 年初 

FROM

zfit02 

WHERE

TEXT = ' 应收账款' 

GROUP BY by 公司,日期,类型

),TB AS(             #上期

SELECT

P_BUKRS as 公司,

DATE_FORMAT(adddate( CONCAT( P_YEAR, P_MONTH,'01' ),MONTH,1), "%Y-%m" )  日期,

TEXT 类型,

SUM(NCS) 年初 

FROM

zfit02 

WHERE

TEXT = ' 应收账款' 

 GROUP BY 公司,日期,类型

)  TB

SELECT YB.公司,YB.日期,YB.类型,YB.年初,TB.年初 AS 同比年初

  FROM YB JOIN TB 

ON  YB.公司=TB.公司   AND  YB.日期=TB.日期

最佳回答
0
梦似幻亦真Lv3见习互助
发布于2022-5-16 17:47

date_sub(TB.日期 , interval 1  month) 这个会是空值,select date_sub('201901' , interval 1  month) 看下

建议在TB里面的查询就把日期减去一个月再格式化

  • 6关注人数
  • 442浏览人数
  • 最后回答于:2022-5-16 17:47
    请选择关闭问题的原因
    确定 取消
    返回顶部