Postgres SQL选择上一个有效日期

Postgres SQL选择上一个有效日期,sql,Sql,我在研究博士后,遇到了一个有趣的问题,我还没有解决它 假设一家公司每隔几天发货一次。这是装运表,用于记录其装运的集装箱数量: 分支字符;日期;容器整数 我想要这份报告: 分支字符;日期;容器整数;前一天;上一个日期的集装箱;希腊字母表的第4个字母 我用这个: Select a.*, b.*, (a.containers – b.containers) delta From shipping a Join shipping b ON b.date=(select date from shipp

我在研究博士后,遇到了一个有趣的问题,我还没有解决它

假设一家公司每隔几天发货一次。这是装运表,用于记录其装运的集装箱数量:

分支字符;日期;容器整数 我想要这份报告:

分支字符;日期;容器整数;前一天;上一个日期的集装箱;希腊字母表的第4个字母 我用这个:

Select a.*, b.*, (a.containers – b.containers) delta
From shipping a
Join shipping b 
ON 
b.date=(select date from shipping where date<a.date order by date desc limit 1)
当桌子很小的时候,这就行了。如果表增长到100000条记录,则此查询速度较慢。我想知道你们有没有更有效的方法

谢谢, 斯蒂芬

只需使用滞后功能

Select s.Branch, s.Date, s.containers,
       lag(s.Date) over (partition by branch order by date) as prev_Date,
       lag(s.containers) over (partition by branch order by date) as prev_Containers
from shipping s;
Select a.*, b.*, (a.containers – b.containers) delta
From shipping a
Join shipping b 
ON 
b.date=(select date from shipping where date<a.date order by date desc limit 1)
Select s.Branch, s.Date, s.containers,
       lag(s.Date) over (partition by branch order by date) as prev_Date,
       lag(s.containers) over (partition by branch order by date) as prev_Containers
from shipping s;