计算每月平均里程数

时间:2017-08-22 22:25:35

标签: sql-server

我有一个车队列表,我试图计算平均每月和每年的里程数。

例如,车辆1970年制造于2015年,目前的里程表为105,341。这意味着卡车是2年或24个月大。因此,年平均值为52,670英里,月平均值为4,389英里。

我正在选择车辆编号,制造年份和当前的里程表读数。

字段M.ManufacturerYear是数据类型int,O.MeterLevel是数据类型varchar

如何编写计算字段以返回列表中每辆车的月平均值和年平均值?

2 个答案:

答案 0 :(得分:0)

也许可以选择计算实际的月数,然后对结果进行年度化(或规范化)。

在下面的例子中,车辆2020只有7个月,但年度里程大于1970年车辆

示例

Declare @YourTable Table ([Vehicle] varchar(50),ManufacturerYear int,[Odometer] int)
Insert Into @YourTable Values 
 (1970,2015,105341)
,(2020,2017,25253)

Select *
      ,NbrMonths   = datediff(month,left(ManufacturerYear,4) +'0101',GetDate()) 
      ,PerMonth    =  [Odometer] / datediff(month,left(ManufacturerYear,4) +'0101',GetDate()) 
      ,Annualized  = ([Odometer] / datediff(month,left(ManufacturerYear,4) +'0101',GetDate()) ) * 12
 From @YourTable

<强>返回

enter image description here

答案 1 :(得分:0)

以下示例代码适用于MS SQL Server中的类似方案。

CREATE TABLE #Vehicle
(
VehicldId int,
YearOfManufacture smallint,
TotalMiles int,
AverageYearlyMiles AS TotalMiles / (YEAR(GETDATE()) - YearOfManufacture),
AverageMonthlyMiles AS TotalMiles / ((YEAR(GETDATE()) - YearOfManufacture) * 12 + MONTH(GETDATE()))
)



insert into #Vehicle(VehicldId,YearOfManufacture,TotalMiles) 
values ( 1970,2015,105400)

SELECT * FROM #Vehicle