如何用SQL按日期排序获取发票的唯一流转路径列表
解决发票流转路径去重的SQL实现
假设你的数据集表名为invoice_flow,包含字段invoice(发票号)、dept(部门)、date(流转日期)。要实现按日期排序并去除连续相同部门的重复记录,可以用LAG()窗口函数对比当前记录与上一条记录的部门,过滤掉重复的连续部门记录,具体SQL如下:
WITH ranked_invoices AS ( SELECT invoice, dept, date, -- 获取同一张发票的上一条记录的部门 LAG(dept) OVER (PARTITION BY invoice ORDER BY date) AS prev_dept FROM invoice_flow ) SELECT invoice, dept, date FROM ranked_invoices -- 过滤条件:要么是该发票的第一条记录,要么当前部门和上一条不同 WHERE prev_dept IS NULL OR dept != prev_dept -- 最终按发票和日期排序输出 ORDER BY invoice, date;
逻辑说明
PARTITION BY invoice:按发票号分组,确保只对比同一张发票的流转记录ORDER BY date:在每个发票组内按流转日期排序,保证流转顺序正确LAG(dept):获取当前记录的上一条记录的部门值- 过滤条件
prev_dept IS NULL OR dept != prev_dept:保留每个发票的第一条流转记录,以及部门发生变化的后续记录,自动剔除连续相同的部门记录
内容的提问来源于stack exchange,提问作者MCP_infiltrator
相关产品推荐
相关产品推荐

