【问题标题】:Calculating cost on energy consumption计算能耗成本
【发布时间】:2018-03-16 08:53:22
【问题描述】:

试图找到一种在数据库上设置模式以计算能源成本的好方法。

我今天在表格中记录功耗。 传感器每小时记录一次。

Timestamp; Value; SensorId;

但现在我想计算 1 月至 2 月一个月的成本。 我在想一个简单的表格,当成本在一天内发生变化时,函数需要处理这些变化。

Timestamp; Value

我现在看到的问题是,如果 cron 作业或传感器不同步等,它会记录值 00:03:12 如果最后一次成本更改是 00:00:00,我应该如何处理或计算结果。我应该将值分成两个不同的00:00:00 和下一个00:03:12

当你遇到这种问题时有办法思考吗?

【问题讨论】:

  • 这要么是一个简单的会计问题,要么是你需要使用平均和猜测的问题。我的问题是您的测量是汇总成本还是瞬时用电量测量。
  • @DylanB 我想这将是总成本。结果应该是一个表格,其中每一行都有每个新成本行的起始值和结束值。所以如果 price 表中只有一行,那么 start 和 end 值的结果将只有一行。

标签: node.js cron database-schema


【解决方案1】:

我会有三张桌子。 测量:

MeasurementID,
MeasurementValue,
Timestamp

总成本:

TotalCostID,
LastMeasurementID,
TimeStart,
TimeEnd, 
EstPeriodTotalCost,
CostID

费用:

CostID,
Price,
Timestamp

这样,当您报告数据时,您将能够更有效地组织数据。简单的 SQL 查询:

SELECT sum(EstPeriodTotalCost) from TotalCosts WHERE (date range, etc)

将提取您的会计信息。从技术上讲,TotalCosts 是一个不必要的表,您可以从其他两个表中计算出您需要的所有信息,但是执行此操作的查询变得复杂,并且在一个小型系统中,这种非规范化可能是可以的。如果数据变得奇怪,您可以使用某种存储过程重新填充 TotalCosts。

【讨论】:

  • LastMeasurementID 有什么用?
  • 它是指向测量ID的外键。因为您在价格变化时计算一行,所以您需要链接到您正在计算的数据点。如果您想明确一点,该表还可以包含指向先前测量和用于计算成本的金额的链接。