You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在SQL Server中如何基于累计运行年限计算年度运行年限?

车辆年度运行年限统计需求与实现

原始车辆运行数据

在SQL Server中维护的车辆运行数据如下:

序号Vehicle_ID启动日期故障日期累计运行年限
112011-01-012013-12-313
212014-01-012015-12-312
312016-01-012019-12-314
412020-01-012022-12-313
522011-01-012015-12-315
622016-01-012022-12-317
832013-01-012016-12-314
1032017-01-012021-12-315

期望统计结果

需要基于上述数据计算年度运行年限,得到如下结果:

年份年度运行年限
20112
20122
20133
20143
20153
20163
20173
20183
20193
20203
20213
20222

统计规则

  • 年份列的起始年份为启动日期中的最小年份
  • 年份列的结束年份为故障日期中的最大年份

SQL实现代码

-- 生成连续年份序列并统计年度运行车辆数
WITH YearRange AS (
    -- 获取年份范围的起止值
    SELECT MIN(YEAR(启动日期)) AS StartYear, MAX(YEAR(故障日期)) AS EndYear
    FROM 车辆运行表
),
Years AS (
    -- 递归生成连续年份列表
    SELECT StartYear AS [年份]
    FROM YearRange
    UNION ALL
    SELECT [年份] + 1
    FROM Years
    WHERE [年份] < (SELECT EndYear FROM YearRange)
)
-- 关联原始数据统计每个年份的运行车辆数
SELECT 
    y.[年份],
    COUNT(DISTINCT v.Vehicle_ID) AS [年度运行年限]
FROM Years y
LEFT JOIN 车辆运行表 v
    ON y.[年份] BETWEEN YEAR(v.启动日期) AND YEAR(v.故障日期)
GROUP BY y.[年份]
ORDER BY y.[年份];

代码说明

  1. YearRange CTE:计算所有车辆启动日期的最小年份和故障日期的最大年份,确定统计的时间范围。
  2. Years CTE:通过递归方式生成从起始到结束的连续年份列表,确保年份无缺失。
  3. 主查询:将年份列表与原始车辆数据关联,判断每个年份是否在车辆的运行周期内,统计每个年份的不同运行车辆数量,即为年度运行年限。

内容的提问来源于stack exchange,提问作者Mr.RK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:15:34