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,所以尚未显示所有详细信息。只有一张桌子。