我有一个SQL(特别是PostgreSQL)的情况,我正在努力。我正在使用的模式/模型不在我的控制之下,也不是我能够改变的东西,所以我正在努力找出处理我已经处理过的牌的最佳方法。
首先是模式,针对这个问题进行了简化,但本质上它是发票(Type = T)和事务(Type <>T)行组合成同一表格。每张发票可以有n个交易行,每个客户可以有n个发票。
<表类>
Id
类型
InvoiceNo
ClientId
tbody><<tr>100 我 100 1 99 X 0 1 98 S 0 1 97 T 0 1 96 我 99 1 95 X 0 1 94 S 0 1 表类>
根据您的示例数据,您可以使用一个累积窗口函数:
select t.*,
min(invoiceno) filter (where type = 'I') over (order by id desc) as imputed_invoiceno
from t;