Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何使用postrgresql在滞后函数中应用分区_Postgresql_Window Functions_Psql_Lag_Partition By - Fatal编程技术网

Postgresql 如何使用postrgresql在滞后函数中应用分区

Postgresql 如何使用postrgresql在滞后函数中应用分区,postgresql,window-functions,psql,lag,partition-by,Postgresql,Window Functions,Psql,Lag,Partition By,我有一张如下所示的表格 subject_id, date_inside, value 1 2110-02-12 19:41:00 1.3 1 2110-02-15 01:40:00 1.4 1 2110-02-15 02:40:00 1.5 2 2110-04-15 04:07:00 1.6 2

我有一张如下所示的表格

subject_id,    date_inside,             value
1           2110-02-12 19:41:00          1.3
1           2110-02-15 01:40:00          1.4
1           2110-02-15 02:40:00          1.5
2           2110-04-15 04:07:00          1.6
2           2110-04-15 08:00:00          1.7
2           2110-04-15 18:30:00          1.8
subject_id,    date_inside,             difference
1           2110-02-12 19:41:00          66 hours
1           2110-02-15 01:40:00          1 hour 
1           2110-02-15 02:40:00          NULL
2           2110-04-15 04:07:00          3 hours, 53 minutes 
2           2110-04-15 08:00:00          10 hours, 30 minutes
2           2110-04-15 18:30:00          NULL
我想计算每个主题连续行之间的
日期差

我试过下面的方法

select a.subject_id,a.date_inside, a.value,
a. date_inside- lag(a. date_inside) over (order by a. date_inside) as difference
from table1 a
虽然上述方法有效,但我无法为每个主题应用
分区。因此,它最终计算所有行的差异(不考虑subject_id)。基本上,每个受试者的最后一行必须是
null
,因为这是他或她的最后一行(不应从下一个受试者的连续记录中减去)

我希望我的输出如下所示

subject_id,    date_inside,             value
1           2110-02-12 19:41:00          1.3
1           2110-02-15 01:40:00          1.4
1           2110-02-15 02:40:00          1.5
2           2110-04-15 04:07:00          1.6
2           2110-04-15 08:00:00          1.7
2           2110-04-15 18:30:00          1.8
subject_id,    date_inside,             difference
1           2110-02-12 19:41:00          66 hours
1           2110-02-15 01:40:00          1 hour 
1           2110-02-15 02:40:00          NULL
2           2110-04-15 04:07:00          3 hours, 53 minutes 
2           2110-04-15 08:00:00          10 hours, 30 minutes
2           2110-04-15 18:30:00          NULL
想象一下“分区依据”与“分组依据”的用法类似。在这种情况下,逻辑边界由subject_id确定,因此仅包括over子句的一部分:

select a.subject_id,a.date_inside, a.value,
a.date_inside - lag(a.date_inside) over (partition by a.subject_id order by a.date_inside) as difference
from table1
想象一下“分区依据”与“分组依据”的用法类似。在这种情况下,逻辑边界由subject_id确定,因此仅包括over子句的一部分:

select a.subject_id,a.date_inside, a.value,
a.date_inside - lag(a.date_inside) over (partition by a.subject_id order by a.date_inside) as difference
from table1

只需添加一个
partitionby
子句,而且您的预期输出似乎想要
LEAD
,而不是
LAG

选择主题id、内部日期、值、,
领先(内日期)超过(按主题划分\u id顺序内日期)
-日期_作为差异
来自表1
订购人
受试者id,
里面的日期;

只需添加一个
分区依据
子句,而且您的预期输出似乎想要
领先
,而不是
滞后

选择主题id、内部日期、值、,
领先(内日期)超过(按主题划分\u id顺序内日期)
-日期_作为差异
来自表1
订购人
受试者id,
里面的日期;

由于您的查询引用了表A并进行了更新,因此尚未显示所有详细信息。这只是一个表。由于您的查询引用了表A和B,所以尚未显示所有详细信息。只有一张桌子。