我在SQL上有点新手,我真的不明白该怎么做,所以任何帮助都非常感谢。我的桌子上摆满了不同读者的读数,其中有500.000,所以我不能手工完成。
我收到的表没有区别。我设法计算了它,但那里有一点问题......
看起来有点像这样:
meter_id | date | reading | difference
1 | 01-01-2013 | 205 | 0
1 | 02-01-2013 | 210 | 5
1 | 03-01-2013 | 213 | 3
... | ... | ... | ...
1 | 31-12-2013 | 2451 | 4
2 | 01-01-2013 | 8543 | 6092
2 | 02-01-2013 | 8548 | 5
meter_id,日期是主键。每个meter_id都与一个日期相结合,这是唯一的
如果最后一列包含不同的meter_id,我怎样才能确定我没有计算出差异?
我想做一些像这样的查询:
SELECT AVG(difference), meter_id FROM table GROUP BY meter_id
方法的完全改变也很好,我只想得到每米的平均差异。
之前有人发布了一个有效的查询,但遗憾地删除了回复。如果你可以重新发布它? :)
答案 0 :(得分:0)
有关
我只想获得每米的平均差异。
你的查询非常好。我认为你的差异计算有问题。 meter_id = 2,6092的第一个值是从仪表1的最后读数与从仪表2读取的第一个读数的差值,我觉得这没有意义。如果我没有弄错的话,差异值是当前的读数 - 前一天读数。因此,您应该将每个仪表的第一个读数的差值设置为0。 然后
SELECT AVG(difference), meter_id FROM table GROUP BY meter_id
会做你期望的事。
答案 1 :(得分:0)
如果您只想要平均差异,可以使用以下查询:
SELECT
meter_id,
MAX(reading) - MIN(reading) / COUNT(*) average_difference
FROM table
GROUP BY meter_id
ORDER BY meter_id;
它的工作原理是给定的meter_id的总差异应该等于MAX(reading) - MIN(reading)
。