新接手项目都是这种 SQL , 各位大佬怎么看 。。。

2019-03-11 09:49:59 +08:00
 ghbaqi
<select id="findFundBgInfo" resultmap="fundBgInfo"> <![CDATA[ SELECT b.secu_id AS F_SECU_ID, b.fund_code AS TRD_CODE, b.fundfullname AS CHI_NAME, b.fundname AS SECU_SHT, b.companyid AS FMC_COM_ID, b.companyname AS FMC_COM_NAME, b.F_INFO_CUSTODIANBANK AS CUST_COM_NAME, IF (f_Pchredm_Pchstartdate IS NULL OR f_Pchredm_Pchstartdate>DATE_FORMAT(NOW(),'%Y%m%d') OR LOCATE('633001001',PUR_ST_temp)>0,'暂停申购', IF(LOCATE('633001002',PUR_ST_temp)>0,'暂停大额申购', IF(LOCATE('633001003',PUR_ST_temp)>0,'暂停定期定额申购', IF(LOCATE('633001004',PUR_ST_temp)>0,'暂停大额定期定额申购','开放申购'))) ) AS PUR_ST, IF (f_Info_Redmstartdate IS NULL OR f_Info_Redmstartdate>DATE_FORMAT(NOW(),'%Y%m%d') OR LOCATE('633001005',REDEM_ST_temp)>0,'暂停赎回', IF(LOCATE('633001006',PUR_ST_temp)>0,'暂停实时赎回','开放赎回') ) AS REDEM_ST, b.isQDII AS IS_QDII, b.fundtype AS INV_TYP_COM, (CASE b.fundtype WHEN '10100' THEN '股票型' WHEN '10200' THEN '债券型' WHEN '10300' THEN '货币型' WHEN '10400' THEN '混合型' WHEN '10600' THEN 'FOF' WHEN '10700' THEN '保本型' WHEN '10800' THEN '理财型' WHEN '10901' THEN 'QDII' WHEN '10905' THEN '指数型' ELSE '专户' END) AS INV_TYP_COM_DESC, DATE_FORMAT(c.TRADE_DT,'%Y-%m-%d') AS TRD_DT, nav.F_NAV_UNIT AS UNIT_NAV, c.F_AVGRETURN_DAY AS CHG_RAT_1D, c.F_AVGRETURN_WEEK AS CHG_RAT_1W, c.F_AVGRETURN_MONTH AS CHG_RAT_1M, c.F_AVGRETURN_QUARTER AS CHG_RAT_3M, c.F_AVGRETURN_HALFYEAR AS CHG_RAT_6M, c.F_AVGRETURN_YEAR AS CHG_RAT_1Y, c.F_AVGRETURN_TWOYEA AS CHG_RAT_2Y, c.F_AVGRETURN_THREEYEAR AS CHG_RAT_3Y, c.F_AVGRETURN_FIVEYEAR AS CHG_RAT_5Y, '' AS CHG_RAT_10Y, c.F_AVGRETURN_SINCEFOUND AS CHG_RAT_BGN, c.F_SFRANK_DAY AS CHG_RAT_1D_RK, c.F_SFRANK_RECENTWEEK AS CHG_RAT_1W_RK, c.F_SFRANK_RECENTMONTH AS CHG_RAT_1M_RK, c.F_SFRANK_RECENTQUARTER AS CHG_RAT_3M_RK, c.F_SFRANK_RECENTHALFYEAR AS CHG_RAT_6M_RK, c.F_SFRANK_RECENTYEAR AS CHG_RAT_1Y_RK, c.F_SFRANK_RECENTTWOYEAR AS CHG_RAT_2Y_RK, c.F_SFRANK_RECENTTHREEYEAR AS CHG_RAT_3Y_RK, c.F_SFRANK_RECENTFIVEYEAR AS CHG_RAT_5Y_RK, '' AS CHG_RAT_10Y_RK , c.F_SFRANK_SINCEFOUND AS CHG_RAT_BGN_RK, d.F_INCOME_PER_MILLION AS UNIT_YLD, d.F_INFO_YEARLYROE AS ANN_YLD_RAT FROM (SELECT base.*,redm.PUR_ST_temp,redm.REDEM_ST_temp FROM (SELECT CASE wb.fundtype WHEN '10901' THEN '1' ELSE '0' END AS isQDII , F_INFO_CUSTODIANBANK,f_Pchredm_Pchstartdate,f_Info_Redmstartdate,wb.companyid,wb.companyname,wb.fundfullname,wb.fundname,wb.fundtype,wb.FUND_CODE,wb.SECU_ID FROM wb_fundinfo wb , wind_db.ChinaMutualFundDescription cmfd WHERE cmfd.F_INFO_WINDCODE = wb.secu_id) base LEFT JOIN (SELECT S_INFO_WINDCODE, GROUP_CONCAT(DISTINCT F_INFO_SUSPCHTYPE) AS PUR_ST_temp, GROUP_CONCAT(DISTINCT F_INFO_SUSPCHTYPE) AS REDEM_ST_temp FROM wind_db.ChinaMutualFundSuspendPchRedm WHERE S_INFO_WINDCODE = #{trdCode} AND ( (f_info_suspchstartdt <= DATE_FORMAT(NOW(), '%Y%m%d') AND f_info_repchdt IS NULL ) OR (f_info_suspchstartdt <= DATE_FORMAT(NOW(), '%Y%m%d') AND f_info_repchdt > DATE_FORMAT(NOW(), '%Y%m%d') ) ) GROUP BY S_INFO_WINDCODE) redm ON base.SECU_ID = redm.S_INFO_WINDCODE) b LEFT JOIN wind_db.ChinaMFPerformance_new c ON b.secu_id=c.S_INFO_WINDCODE LEFT JOIN ( SELECT F_NAV_UNIT,F_INFO_WINDCODE,ANN_DATE,price_date FROM wind_db.ChinaMutualFundNAV_new cmfnav ) nav ON b.secu_id=nav.F_INFO_WINDCODE LEFT JOIN wind_db.CMoneyMarketDailyFIncome d ON b.secu_id=d.S_INFO_WINDCODE AND d.f_info_enddate =nav.price_date WHERE b.fund_code = #{trdCode} ]]> </select> </select>
4857 次点击
所在节点    问与答
32 条回复
ghbaqi
2019-03-11 14:42:06 +08:00
@lazyfighter 不是报表 业务代码
saulshao
2019-03-11 17:01:51 +08:00
这....厉害!这种代码貌似很多.....
我反正见过很多很多
e2c
2019-03-11 18:11:31 +08:00
存储过程写长点无所谓,但是一个查询语句搞这么长,是要整死接手的人吗
Leigg
2019-03-11 18:52:40 +08:00
有毒
shehuizhuyi
2019-03-11 19:23:44 +08:00
@kamal 这条 sql 执行后服务器不得爆炸
kangzai50136
2019-03-11 19:28:12 +08:00
厉害。
alakey1989
2019-03-11 19:45:54 +08:00
我尼玛~1
greed1is9good
2019-03-11 20:31:40 +08:00
还好,不是很长。。。
huobazi
2019-03-11 22:04:44 +08:00
正常了
akatquas
2019-03-11 22:13:27 +08:00
用你的语言习惯改写业务接口,同时读代码,理解 SQL 在干嘛就很容易。
顺便你完成了一次重构(狗头
ghbaqi
2019-03-12 08:45:37 +08:00
@akatquas 关键就是不知道业务 , 公司也没人知道这块业务 , 要我自己看 ...................
Damon4V
2019-03-12 11:13:25 +08:00
重构吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/543195

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX