如何编写SQL按时间范围聚合Table B列实现两表关联查询
需求可行性结论
该需求完全可以通过标准SQL实现,无需额外写代码定时重写结果表,只要做好索引优化,查询性能完全可以支撑近实时API调用。
核心实现逻辑
- 关联规则:Table A和Table B通过
Asset字段做等值关联 - 时间过滤:限定Table B的
EventStart字段落在Table A对应LastChanged到当前时间的区间内 - 分组维度:按Table A的
Asset、Part字段分组,保证Table A每一条Asset+Part记录对应一行聚合结果 - 异常兼容:计算第二项聚合值时要处理
Temp为0的场景,避免出现除以0的报错
示例SQL代码
SELECT a.Asset, a.Part, SUM(b.Revs) AS 总转数, SUM(CASE WHEN b.Temp != 0 THEN (b.Revs * b.Load) / b.Temp ELSE 0 END) AS 负载转数温度比总和 FROM Table_A a LEFT JOIN Table_B b ON a.Asset = b.Asset AND b.EventStart >= a.LastChanged AND b.EventStart <= CURRENT_TIMESTAMP -- 若只需统计到当日零点,可替换为CURRENT_DATE GROUP BY a.Asset, a.Part, a.LastChanged;
性能优化建议
如果两张表数据量较大,可通过索引优化提升查询速度:
- 给Table A建联合索引
(Asset, Part, LastChanged),覆盖分组和关联所需字段 - 给Table B建联合覆盖索引
(Asset, EventStart, Revs, Load, Temp),关联查询时无需回表取数
内容的提问来源于stack exchange,提问作者ortunoa
相关产品推荐
相关产品推荐

