如何基于lot_product的状态序列筛选数据?附SQL示例与样本
实现逻辑
你给出的所有筛选规则可以简化为:按时间升序排列每个lot_product的状态记录后,取该分组的最后一条记录,若这条记录的状态为IN或RETURN则保留,为OUT则直接过滤该分组的所有记录。
修改后的SQL语句
WITH ranked_lot AS ( SELECT dt_prod, lot_product, kode_rak, item_type, item_size, operator, qty_mtr, qty_mtr_sisa, status, tanggal, -- 按lot_product分组,按时间倒序排序,最新的记录排第一 ROW_NUMBER() OVER (PARTITION BY lot_product ORDER BY tanggal DESC) AS rn FROM prod_scan_item_fg ) SELECT dt_prod, lot_product, kode_rak, item_type, item_size, operator, qty_mtr, qty_mtr_sisa, status, tanggal FROM ranked_lot -- 取每个lot的最新记录,且状态为IN/RETURN WHERE rn = 1 AND status IN ('IN', 'RETURN')
逻辑验证
对应你的样本数据:
- lot_product = A的最新记录是
RETURN,符合条件保留 - lot_product = B的最新记录是
IN,符合条件保留 - lot_product = C的最新记录是
OUT,直接过滤 - lot_product = D的最新记录是
OUT,直接过滤
最终输出和你给出的期望结果完全一致。
内容的提问来源于stack exchange,提问作者dedik
相关产品推荐
相关产品推荐

