2017-07-01 64 views
-1

我有一个脚本,每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,然后获得每个后续值之间的差异,以获得另一列中的差异,然后得到平均值,但我对此解决方案并不满意。我确定有一些更简单的东西,但我似乎无法找到它。

通缉的结果

AVG(TonerConsumption) DateTime 
4.55558   1.7.2017 
  • 没有人有一个想法,当数值恢复到100我如何处理最终笔芯和?我是否需要引入另一列,用于“计算”重新计算填充物(例如,如果可能,请检查碳粉标识,或者在插入表格之前检查新值是否大于最新值,然后将该特定列增加值
  • ?例如:。

    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

    编辑你的问题,显示你想要的结果。另外,决定是否要在Excel或t-sql中使用解决方案,并选择适当的标签。 –

    +0

    @GordonLinoff完成。希望没问题。 (需要TSQL) –

    +0

    你有什么计划来处理缺乏午夜样本?在跨越一天的边界的时间跨度上扩大消费?全部收取第一次或第二次约会?如何补充?如果你从“42”到“93”,你可以假设发生了再次加注并且等级达到了“100”,但是你在预加注水平时使用了什么?你所知道的是它不超过'42'(除非你错过了一个或多个干预笔芯)。 – HABO

    回答

    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); 
    
    +0

    我会尽快检查。 –