从Postgres中获取每个值与总体最小值的差异

时间:2016-07-15 23:12:30

标签: postgresql

我有一个数据表,其时间戳采用时区格式(称为“时间”)。我还有一个空表,它接受间隔数据类型值。对于空表中的每一行,我想插入原始数据中该行的时间戳与原始数据中的总体最小时间戳值之间的间隔差异。我正在尝试做这样的事情:

INSERT INTO
    time_pyramid
SELECT
    "time" - MIN("time")
FROM
    time_raw;

但是它告诉我“ERROR:column”time_raw.time“必须出现在GROUP BY子句中或者用在聚合函数中”。我知道我希望每个时间戳值与表的总体最小时间戳值之间的间隔差异,并且“时间”最终不会从此间隔转换中获得重复值,因此我不认为我应该在该上下文中使用GROUP BY 。我也没有理由在第一个“时间”使用聚合函数,那么如何修复我的查询以反映我想要的内容呢?

编辑:实际上,“将每个值作为与min的间隔差异”是这个问题的更好标题

1 个答案:

答案 0 :(得分:1)

min()用作window function

with time_raw("time") as (
    values
        ('2016-01-11'::timestamp),
        ('2016-01-01'::timestamp),
        ('2016-01-21'::timestamp)
)

select 
    "time"- min("time") over () as interval
from 
    time_raw;

 interval 
----------
 10 days
 00:00:00
 20 days
(3 rows)