Sql 分组中第一行和最后一行之间的差异

Sql 分组中第一行和最后一行之间的差异,sql,postgresql,group-by,grouping,Sql,Postgresql,Group By,Grouping,这个表取自非常复杂的查询,也就是说,它本身不可能连接。 行按时间描述排序 type, value, time +---+----+ | 2 | 2 | | 2 | 7 | | 3 | 20 | | 3 | 16 | +---+----+ 我需要计算每个类型分组的第一个值和最后一个值之间的差异,在给定的示例中,这将为我提供 +---+----+ | 2 | -5 | | 3 | 4 | +---+----+ 可行吗?一种方法使用窗口函数。类似这样的工作原理: select dist

这个表取自非常复杂的查询,也就是说,它本身不可能连接。 行按时间描述排序

type, value, time
+---+----+
| 2 |  2 |
| 2 |  7 |
| 3 | 20 |
| 3 | 16 |
+---+----+ 
我需要计算每个类型分组的第一个值和最后一个值之间的差异,在给定的示例中,这将为我提供

+---+----+
| 2 | -5 |
| 3 | 4  |
+---+----+  

可行吗?

一种方法使用窗口函数。类似这样的工作原理:

select distinct type,
       (first_value(value) over (partition by type order by time asc) -
        first_value(value) over (partition by type order by time desc)
       ) as diff        
from t;
不幸的是,Postgres没有
first\u value()
聚合函数

您也可以使用
array\u agg()
执行此操作:


一种方法使用窗口函数。类似这样的工作原理:

select distinct type,
       (first_value(value) over (partition by type order by time asc) -
        first_value(value) over (partition by type order by time desc)
       ) as diff        
from t;
不幸的是,Postgres没有
first\u value()
聚合函数

您也可以使用
array\u agg()
执行此操作:


每种类型是否只有2行数据?是的,这是子查询的结果,每个类型只返回2行最后的值。每个类型是否只有2行数据?是的,这是子查询的结果,每个类型只返回2行最后的值。是否可以不使用postgresql特定的函数,只使用窗口函数?
first_value()
是一个标准的分析函数。是否可以不使用postgresql特定的函数,只使用窗口函数?
first\u value()
是一个标准的分析函数。