文章目录
- 业务场景
业务场景
生产中遇到一个需求,需要统计在某段时间内指定客户的财务收款信息。
比如统计A客户10月1日~11月1日之间的财务应数据,在统计汇总的时候,需要计算A用户在10月1号前的结余信息,这就需要查询10月1日前这个客户的最后一次交易记录。
刚开始是准备直接用数据库的自增主键来取10月1日前的最后一条记录,后来发现有问题。在实际财务操作中,最大的Id不一定就是最后一笔数据。因为实际操作中根据单据时间来进行录入,导致Id排序不可靠。
需要再分组排序中取最值,SQL如下:
SELECT
Id
FROM
(SELECT
CustomerId AS CustomerId,
OrgId AS OrgId,
ReceivableDetailId AS Id,
row_number() over (partition by CustomerId,OrgId order by ActualSourceDate,ReceivableDetailId) AS tempId
FROM
report_financial_receivable_source
WHERE
TenantId = 100 ) AS temp
WHERE temp.tempId = 1
这里就是按照CustomerId,OrgId分组,组内按照ActualSourceDate,ReceivableDetailId排序,最后取其中最早的一条记录。
如果需要求最晚的记录,则排序方式改为倒序。