### 知识点梳理
#### 1. 环比计算概念
环比计算是指在统计学中,比较相邻两个周期(如相邻月份、季度或年份)的数据变动情况。具体到本文,是将本月累计数据与上月累计数据进行比较,以反映月度数据变化。
#### 2. 本月累计与上月累计定义
- **本月累计**指的是从当前月份的第一天起至当前日期的所有数据的累计值。
- **上月累计**指的是从上一个月份的第一天起至与本月同一天的所有数据的累计值。
#### 3. 环比计算公式
环比增长率的计算公式为:(本月累计 - 上月累计) / 上月累计 * 100%,其结果表示为百分比形式,反映数据增长或下降的百分比。
#### 4. SQL 解决方案
文章提供了一套基于 SQL 的解决方案来实现环比计算。主要步骤包括:
- 使用 CTE(公用表表达式)分别构建本月数据集和上月数据集。
- 通过 `OVER` 子句实现滚动累计计算。
- 使用 `LEFT JOIN` 实现跨月日期对齐。
- 对于月末异常情况进行处理,比如上月无同日数据时取上月最后一天的累计值。
- 对环比值进行计算,并处理除零异常。
#### 5. SQL 技术解析
- **滚动累计计算**:使用窗口函数 `SUM(SUM(...)) OVER(...)` 来计算从当月第一天至当前日期的累计值。
- **跨月日期对齐**:通过计算日期偏移和月份数匹配,精确匹配同月同日或处理月末日期差异。
- **月末异常处理**:使用 SQL 函数 `COALESCE` 和窗口函数 `LAST_VALUE` 来处理月末无数据的情况。
- **执行优化**:使用分区键进行高效范围查询,减少窗口计算数据量,并避免全表扫描。
#### 6. 特殊场景处理
- **月初1号处理**:无需特殊处理,因为自然对齐。
- **闰年2月29日处理**:通过条件语句来匹配非闰年2月28日。
- **上月无数据**:通过 `NULLIF` 函数安全处理除零,避免返回错误,便于业务识别“无同比数据”。
- **跨年处理**:SQL 自动处理年份变更,无需额外编程。
#### 7. SQL 脚本执行
- **构建本月数据集和上月数据集**:分别构建当前月份和上一个月份的数据集,并进行数据的聚合。
- **日期对齐**:连接本月数据集和上月数据集,确保时间点的正确匹配。
- **计算环比增长率**:计算本月累计值与上月累计值的差异,并除以上月累计值,结果乘以100得出百分比。
#### 8. 其他注意事项
- 执行 SQL 查询前,需要确保数据源 ADS_PLAN_WO_PRD_DD 中包含 mfg_date、epi_out、fab_out 和 bgbm_out 等字段,并且 year_month 字段正确标记了月份信息。
- 计算时要注意数据集的时间范围,确保本月和上月数据完整。
- 在实际应用中,可能需要根据具体业务需求调整 SQL 查询。