MySQL如何对比当日与7天前同时间同列值的增减百分比?
解决方案
你可以通过**自连接(SELF JOIN)**匹配当日与7天前同时间、同Subject、同Description的记录,进而计算数值变化百分比。以下是具体SQL语句:
SELECT t1.Date, t1.Time, t1.Subject, t1.Description AS Subject1, t1.Value, CASE WHEN t2.Value IS NULL THEN '?' ELSE CONCAT( ROUND( ((t1.Value - t2.Value) / t2.Value) * 100, 2 ), '%' ) END AS Status FROM your_table_name t1 LEFT JOIN your_table_name t2 ON DATE_SUB(t1.Date, INTERVAL 7 DAY) = t2.Date AND t1.Time = t2.Time AND t1.Subject = t2.Subject AND t1.Description = t2.Description ORDER BY t1.Date, t1.Time, t1.Subject;
关键说明:
- 自连接条件:必须同时匹配
Date(当日减7天)、Time、Subject、Description,确保找到的是完全对应的7天前同一条指标记录——这大概率是你之前LEFT JOIN结果不符合预期的核心原因(关联条件不全)。 - Status计算逻辑:
- 若7天前无对应记录(
t2.Value IS NULL),显示?; - 否则计算变化百分比:
((当前值 - 7天前值)/7天前值)*100,用ROUND保留两位小数后拼接%符号。
- 若7天前无对应记录(
- 请将
your_table_name替换为你的实际表名。
如果需要给增长数值添加+号以区分正负,可调整CASE语句:
CASE WHEN t2.Value IS NULL THEN '?' ELSE CONCAT( IF((t1.Value - t2.Value) >= 0, '+', ''), ROUND( ((t1.Value - t2.Value) / t2.Value) * 100, 2 ), '%' ) END AS Status
内容的提问来源于stack exchange,提问作者luckymanh_74yahoocom
相关产品推荐
相关产品推荐

