MySql数据库Group分组内排序取数据

文章目录

业务场景

生产中遇到一个需求,需要统计在某段时间内指定客户的财务收款信息。
比如统计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排序,最后取其中最早的一条记录。
如果需要求最晚的记录,则排序方式改为倒序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值