PostgreSQL间隔的总和

时间:2013-07-22 15:08:39

标签: sql postgresql sum

在我的数据库中,我有以下行:

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中进行这种求和的最佳方法是什么?

最佳

3 个答案:

答案 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')