我有一个脚本,每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
通缉结果
AVG(TonerConsumption) DateTime
4.55558 1.7.2017
示例:
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
努力奋斗,所以我很感激任何帮助。感谢。
答案 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);