获得每日碳粉消耗量的平均值

时间:2017-07-01 18:24:41

标签: sql sql-server tsql

我有一个脚本,每x分钟检查一次我的打印机级别。我将这些数据插入到T-SQL表中。

该表看起来有点像这样:

Toner Level  Date Time
50           1.7.2017 20:10
45           1.7.2017 20:25
42           1.7.2017 20:39
36           1.7.2017 20:53
24           1.7.2017 21:08
22           1.7.2017 21:22
21           1.7.2017 21:37
19           1.7.2017 21:51
15           1.7.2017 22:05
9            2.7.2017 17:46
  1. 我正在考虑一个查询,它会根据这些值给我每天的平均碳粉消耗量。 为了完成这项工作,我试图使用excel然后获取每个后续​​值之间的差异以获得另一列的差异,然后获得平均值,但我对此解决方案不满意。我确信有一些更简单的东西,但我似乎无法找到它。
  2. 通缉结果

    AVG(TonerConsumption)   DateTime
    4.55558           1.7.2017
    
    1. 有没有人知道如何处理最终的补充以及价值何时回到100?我是否需要引入另一个“以某种方式”计算重新填充的列(例如,如果可能,请检查碳粉ID,或者在插入表格之前检查新值是否大于最新值,然后给出该特定列增值?
    2. 示例:

      Toner Level  Date Time
      9            2.7.2017 06:10
      5            2.7.2017 14:20
      1            2.7.2017 16:20
      100          2.7.2017 16:35
      

      努力奋斗,所以我很感激任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用累计金额计算补货以识别组:

select t.*,
       sum(case when toner_level = 100 then 1 else 0 end) over (order by datetime) as cartridgegroup
from t;

您可能遇到的唯一问题是,如果有人插入新墨盒,然后在下一个时间段检查之前不使用它。这是一个边缘情况,你需要更好地描述你想要在边缘情况下做什么。这假设 - 正如您的问题所述 - 新墨盒的值为100。

如果您想要每天的平均金额:

select cast(datetime as date), avg(toner_level)
from t
group by cast(datetime as date)
order by cast(datetime as date);