我有一个表格,用来输入每周霍布斯计时表的车辆读数。我需要能够将每辆车在一段时间内使用的总小时数加起来。我遇到的问题是,有时仪表一旦出现故障就会被换出,并被新的仪表替换,而这些仪表是不可编程的,我必须从零小时开始,所以我需要循环检查每个仪表读数,并确定仪表是否已被交换,并在代码中说明这一点。我不是很喜欢游标,但我可能不得不使用游标来创建一个可以工作的存储过程,除非有人有更好的解决方案,我应该尝试一下。我正在想一个CTE可能会有帮助的方法,但目前还没有什么帮助。
表结构为:
ReadingDate Datetime
EquipmentId Int
MeterReading decimal(18,2)我计划创建一个累加变量,循环游标中的行,并将读取差值添加到变量中。因此,当我在循环中看到仪表读数小于之前的读数时,我必须有一个仪表交换,并将不得不考虑它。我在想,如果我在下一次读数中向前看,它低于当前读数,我会跳过一次求和操作,然后开始将差值添加到累加变量中。有没有更好的方法呢?谢谢。
发布于 2012-10-18 10:19:22
这将在SqlServer中工作:
SELECT t1b.EquipmentId,
t1a.ReadingDate As StartDate,
t1b.ReadingDate AS EndDate,
CASE
WHEN t1b.Reading >= t1a.Reading THEN t1b.Reading - t1a.Reading
ELSE t1b.Reading
END AS Hours
FROM MeterReadings AS t1a
JOIN (select t11.EquipmentId,
t11.ReadingDate AS Date1,
(SELECT MIN(t13.ReadingDate)
FROM MeterReadings AS t13
WHERE t13.EquipmentId = t11.EquipmentId
AND t13.ReadingDate > t11.ReadingDate
Group By t13.EquipmentId) AS NextReadingDate
from MeterReadings AS t11) AS rd ON t1a.EquipmentId = rd.EquipmentId
AND t1a.ReadingDate = rd.Date1
JOIN MeterReadings as t1b ON t1b.EquipmentId = t1a.EquipmentId
AND t1b.ReadingDate = rd.NextReadingDate
order by t1a.EquipmentId, t1a.readingdateSQL Fiddle I was playing with
https://stackoverflow.com/questions/12945721
复制相似问题