求问Mysql同比环比SQL语句怎么写

求问Mysql同比环比SQL语句怎么写,第1张

首先明确概念:

环比增长率=(本期数-上期数)/上期数*100% 反映本期比上期增长了多少。

同比增长率=(本期数-同期数)/同期数*100% 指和去年同期相比较的增长率。

SQL 同期对比月?

这个 同期的期, 是 年? 半年? 还是季度?

如果是年的话。就是 用 需要比较的日期 减去一年的 *** 作来处理。

如果是 半年的话, 用 需要比较的日期 减去6个月的 *** 作来处理。

如果是 季度的话, 用 需要比较的日期 减去3个月的 *** 作来处理。

至于 日期如何减 , 例如减少 6 个月。

Oracle 使用 ADD_MONTHS( 日期, -6 )

SQL Server 使用 DATEADD( mm, 日期, -6 )

MySQL 使用 DATE_SUB( 日期, INTERVAL 6 MONTH)

至于 如何多个字段确定一条数据。

这个不大清楚你的表是如何设计的。

一般情况下,是一个主键确定一条数据。

CREATE TABLE test_liupeng841121(

name VARCHAR(10),

year INT,

month INT,

sl INT

)

go

INSERT INTO test_liupeng841121

SELECT '福田',2010, 11, 72 UNION ALL

SELECT '东本',2010, 11, 85 UNION ALL

SELECT '古田',2010, 11, 123 UNION ALL

SELECT '福田',2010, 12, 96 UNION ALL

SELECT '东本',2010, 12, 34 UNION ALL

SELECT '福田',2011, 1, 78

go

SELECT

T_Now.name AS 名称,

T_Now.year AS 年,

T_Now.month AS 月,

T_Now.sl AS 当月数据,

T_Prev.sl AS 上月数据

FROM

test_liupeng841121 T_Now LEFT JOIN

test_liupeng841121 T_Prev

ON (

T_Now.name = T_Prev.name

AND (

(T_Now.year = T_Prev.year AND T_Now.month = T_Prev.month + 1)

OR

(T_Now.year = T_Prev.year + 1 AND T_Now.month = 1 AND T_Prev.month = 12)

)

)

ORDER BY

T_Now.name, T_Now.year, T_Now.month

-- 可以参考下,以下是MySQL的写法

select count(1) from a where txdate between '2019-01-01' and '2019-07-01'

UNION

select count(1) from a where txdate between DATE_SUB('2019-01-01',INTERVAL 1 year) and DATE_SUB('2019-07-01',INTERVAL 1 year)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7665227.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存