2

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

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

最好的

4

3 回答 3

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

于 2013-07-22T15:23:14.007 回答
1

如果我对您的理解正确,您正在寻找每小时的总数吗?

SELECT EXTRACT(hour FROM "date") hr,
       SUM(value) total
FROM yourtable
GROUP BY hr
ORDER BY hr;
于 2013-07-22T15:23:35.193 回答
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')
于 2017-05-17T12:19:37.393 回答