sql计算‘去年同期’的问题,求一优化方案,谢谢。

问题描述

sql计算‘去年同期’的问题,求一优化方案,谢谢。
 SELECT a.period, a.type, a.commodity, a.export, a. CODE, a.unit, a.number, -- 当月量
a.total_number, -- 累积量
a.amount, -- 当月金额
a.total_amount, -- 累计金额
( SELECT number FROM c_now_data b WHERE CAST(b.period AS CHAR(50)) = CAST( CONCAT( LEFT (a.period, 4) - 1, '-', RIGHT (a.period, 2)) AS CHAR (50)) AND b.type = a.type AND b.commodity = a.commodity AND b.export = a.export AND b. CODE = a. CODE ) AS tq_number, -- 当月量(去年同期)
( SELECT total_number FROM c_now_data b WHERE CAST(b.period AS CHAR(50)) = CAST( CONCAT( LEFT (a.period, 4) - 1, '-', RIGHT (a.period, 2)) AS CHAR (50)) AND b.type = a.type AND b.commodity = a.commodity AND b.export = a.export AND b. CODE = a. CODE ) AS tq_total_number, -- 累积量(去年同期)
( SELECT amount FROM c_now_data b WHERE CAST(b.period AS CHAR(50)) = CAST( CONCAT( LEFT (a.period, 4) - 1, '-', RIGHT (a.period, 2)) AS CHAR (50)) AND b.type = a.type AND b.commodity = a.commodity AND b.export = a.export AND b. CODE = a. CODE ) AS tq_amount, -- 当月金额(去年同期)
( SELECT total_amount FROM c_now_data b WHERE CAST(b.period AS CHAR(50)) = CAST( CONCAT( LEFT (a.period, 4) - 1, '-', RIGHT (a.period, 2)) AS CHAR (50)) AND b.type = a.type AND b.commodity = a.commodity AND b.export = a.export AND b. CODE = a. CODE ) AS tq_total_amount -- 累计金额(去年同期)
FROM c_now_data a WHERE a.commodity ='26030000' ORDER BY a.period, -- 日期
a.type, --  类型
a.commodity, -- 产品
a.export, -- 进出口
a. CODE -- 明细

解决方案

你看你的这些子查询的From和Where都是一样的,直接Join

 SELECT a.period,
    a.type,
    a.commodity,
    a.export,
    a.CODE,
    a.unit,
    a.number, -- 当月量
    a.total_number, -- 累积量
    a.amount, -- 当月金额
    a.total_amount, -- 累计金额
    b.number AS tq_number, -- 当月量(去年同期)
    b.total_number AS tq_total_number, -- 累积量(去年同期)
    b.amount AS tq_amount, -- 当月金额(去年同期)
    b.total_amount AS tq_total_amount -- 累计金额(去年同期)
FROM c_now_data a
    LEFT JOIN c_now_data b
    ON CAST(b.period AS CHAR(50)) = CAST( CONCAT( LEFT (a.period, 4) - 1, '-', RIGHT (a.period, 2)) AS CHAR (50))
        AND b.type = a.type
        AND b.commodity = a.commodity
        AND b.export = a.export
        AND b. CODE = a. CODE
WHERE a.commodity ='26030000'
ORDER BY a.period, -- 日期
    a.type, --  类型
    a.commodity, -- 产品
    a.export, -- 进出口
    a. CODE -- 明细
时间: 2024-09-20 00:22:54

sql计算‘去年同期’的问题,求一优化方案,谢谢。的相关文章

sql查询-求帮忙优化我这条sql语句

问题描述 求帮忙优化我这条sql语句 首先说一下下面sql语句要用到的表的基本情况: 一.有三张表,一张叫equipment,一张叫sensor,一张叫sensorInputData 二.三表关系是equipment下有多个sensor,sensor下有多个sensorInputdata,所以sensor下有一个equipment的主键quipmentId做外键,sensorInputData下也有一个sensor的主键sensorId做外键,其他都是各自表的属性,应该能比较清晰的看出来 下面是

oracle语句-求高手优化sql 主要针对group by

问题描述 求高手优化sql 主要针对group by SELECT r.custid custid i.productid i.officialsocialprice price SUM(i.quanitity) amount FROM IMEIBATCH i RDCUST r RDCUSTDETAIL d WHERE (i.vendororgacode = 'ZD' OR i.vendororgacode IN (SELECT orgacode FROM organiza WHERE pare

优化 oracle-oracle order by 求帮优化

问题描述 oracle order by 求帮优化 select A.aId, (select count(1) from B where B.aId = a.aId) c from A order by c 表A有30W+数据 表B有18W+数据 用上面sql查要10分钟,如果去掉order by则在2秒内,求高手指导怎么优化 解决方案 有高人指点,这样写能控制在10秒左右,但不是理解 select A.aId, NVL(B.c,0) from A LEFT JOIN (select aId,

阿里云大数据MaxCompute计算资源分布以及LogView分析优化

MaxCompute(原ODPS)的概念 大数据计算服务(MaxCompute,原名ODPS)是一种快速.完全托管的PB/EB级数据仓库解决方案,具备万台服务器扩展能力和跨地域容灾能力,是阿里巴巴内部核心大数据平台,支撑每日百万级作业规模.MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全.(官方文档有这里就不多做介绍了)官方文档链接 优势 用户不必关心分布式计算细节,从而达到分析大数据的目的.

求一个优化的写法

问题描述 ///<summary>///编辑客户信息///</summary>///<paramname="model"></param>///<returns></returns>publicintEditCustomer(CustomerModelmodel){intres=CustomerDAL.Update(model);returnres;}///<summary>///编辑客户信息[前台]/

c++-C++计算哈密尔顿回路的优化算法的实现?请各位高手都来帮帮忙吧

问题描述 C++计算哈密尔顿回路的优化算法的实现?请各位高手都来帮帮忙吧 C++计算哈密尔顿回路的优化算法的实现?请各位高手都来帮帮忙吧 解决方案 http://wenku.baidu.com/link?url=Aue42qZXYxiqlYt5WJJ-rMyFkotcIy501YzLF2V1Eww1j17n7myWEj0Z7bNIPYZcqsmlBf9UMqfGRmn5Z6E3iHliGQaJPCLBnpG7pilNmVm

mysql 查询重复的数据的SQL优化方案

 在mysql中查询不区分大小写重复的数据,往往会用到子查询,并在子查询中使用upper函数来将条件转化为大写.如:   代码如下: select * from staticcatalogue WHERE UPPER(Source) IN (SELECT UPPER(Source) FROM staticcatalogue GROUP BY UPPER(Source) having count(UPPER(Source))>1) ORDER BY upper(Source) DESC;   这条

网页设计与开发-网页设计,有一段代码太冗长了,求帮忙优化下!!!感激不尽!!!

问题描述 网页设计,有一段代码太冗长了,求帮忙优化下!!!感激不尽!!! 在最底下的那一段script代码太冗长了,求帮忙优化下,感激不尽!!! 以下是己完成的代码: <!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> </head> <style> .explain_box{ float:lef

sql语句转换成hql求大神解决

问题描述 sql语句转换成hql求大神解决 具体sql语句如下,变成hql语句,请高手知道一下.select * from plan_run r where r.id in(select t.plan_run_waishi_user_id from PLAN_RUN_OA_USER t where t.oa_user_id= ?) 解决方案 from 实体类1 p where p.id in ( select i.id from 实体类2 i where i.useId = ? )注意hql里面