在我的数据库中,我有以下行:
date , value
16:13:00, 500
16:17:00, 700
16:20:00, 0
现在我想在16:00:00到17:00:00之间进行超值的“特殊金额”。所以直到16:13我们假设我们有0。 所以特殊的总和看起来像(我会省略秒数):
...
0 + -- (16:12)
500 + -- (16:13)
500 + -- (16:14)
500 + -- (16:15)
500 + -- (16:16)
700 + -- (16:17)
700 + -- (16:18)
700 + -- (16:19)
0 + -- (16:20)
...
所以我在数据库中只有值的变化以及何时发生这种变化。而且我想总结一整个小时。结果应该是4100。 使用PostgreSQL在sql中进行这种求和的最佳方法是什么?
最佳
答案 0 :(得分:1)
您最初只能选择时间戳的小时,然后按小时分组:
SELECT
sum(s.value),
s.hour
FROM
(SELECT
value,
EXTRACT(HOUR FROM time) as hour
FROM la_table) as s
GROUP BY s.hour
这样你当然可以从15:00:00到15:59:59获得价值。
用于播放的SQLFiddle:http://sqlfiddle.com/#!1/d6ad1/1
答案 1 :(得分:1)
如果我理解你的话,那么你每小时只需要总数吗?
SELECT EXTRACT(hour FROM "date") hr,
SUM(value) total
FROM yourtable
GROUP BY hr
ORDER BY hr;
答案 2 :(得分:0)
如果我理解,您希望选择在一段时间内出现的每个条目。在此示例中,如果时间值在10:00和11:00之间的星形在该期间之前或期间之前出现,或者如果它在该期间之后的期间结束,则选择该行。
select * from table
where table.start_time < end_of_period and table.end_time > end_of_period
select * from table
where (start_time < '2017-05-16 11:00:00') and (end_time > '2017-05-16 10:00:00')