我有以下记录:
id run_hour performance_hour value
2 "2017-06-25 09:00:00" "2017-06-25 07:00:00" 6
2 "2017-06-25 09:00:00" "2017-06-25 08:00:00" 5
1 "2017-06-25 09:00:00" "2017-06-25 08:00:00" 5
2 "2017-06-25 08:00:00" "2017-06-25 07:00:00" 5
1 "2017-06-25 08:00:00" "2017-06-25 07:00:00" 5
我们每小时运行一次以查看当前小时和前几个小时的每个 id 的结果。
仅当与前一小时的运行相比发生变化时,我们才插入一个新的记录(我们不想覆盖该值,因为我们想在 1 小时或 2 小时等之后测量该值。
我想对每个 id 的最新可用值求和(按 run_hour 排序) - 这些值。
在上面的示例中,9:00 运行和 7:00 运行时间的广告 1 没有记录 - 因为它与 8:00 运行和 7:00 运行时间相同
在上面的示例中,如果我询问 run 2017-06-25 09:00:00 的值的总和,我希望得到:
id, value
1 10
2 11
对于 id 1,计算为 10:(run_hour<2017-06-25 08:00:00> + run_hour<2017-06-25 09:00:00>),对于 id 2,计算为 11:(run_hour<2017 -06-25 09:00:00> + run_hour<2017-06-25 09:00:00>) 我写了以下查询:
select distinct on (id, run_hour) id, sum(value) from metrics where run_hour <= '2017-06-25 09:00' and performance_hour >= '2017-06-25 07:00' and performance_hour < '2017-06-25 09:00'
group by id
order by id, run_hour
但是我收到一个错误,run_hour 也必须在 GROUP BY 子句中。- 但如果我添加它,我会得到不正确的数据 - 还有我不需要的前几个小时的数据 - 我需要有数据的最新一小时。
如何在 group by 中使用“distinct on”?