查找产品的最新不良代码 (一个产品对应N个不良代码),需要一次性查找多个。
现在以'SBWV3677LVW','SBWV2230H1K' 这两片为例,每个产品对应多个不良代码,需要查找两个最新的不良代码;
SELECT bpd.product_name, bpd.operation_name, bpd.fb_code, bpd.check_user, bpd.create_time, bpd.grade, bpd.defect_name FROM bs_product_defect bpd where bpd.product_name in ('SBWV3677LVW','SBWV2230H1K');
方法一:lead()函数:
1)按产品分区,然后按创建时间排序,
2)lead是取下一条数据。
3)如果下一条数据是空的,这条数据就是最新的
SELECT bpd.product_name, bpd.operation_name, bpd.fb_code, bpd.check_user, bpd.create_time, bpd.grade, bpd.defect_name, LEAD(bpd.defect_name) OVER (PARTITION BY bpd.product_name ORDER BY bpd.create_time) AS next_defect_name FROM bs_product_defect bpd where bpd.product_name in ('SBWV3677LVW','SBWV2230H1K');
SELECT src.product_name, src.operation_name, src.fb_code, src.check_user, src.create_time, src.grade, src.defect_name FROM (SELECT bpd.product_name, bpd.operation_name, bpd.fb_code, bpd.check_user, bpd.create_time, bpd.grade, bpd.defect_name, LEAD(bpd.defect_name) OVER (PARTITION BY bpd.product_name ORDER BY bpd.create_time) AS next_defect_name FROM bs_product_defect bpd where bpd.product_name in ('SBWV3677LVW','SBWV2230H1K') ) src WHERE next_defect_name IS NULL;
扫描二维码关注公众号,回复:
11254842 查看本文章
方法二:first_value 函数:选择一列第一条数目
SELECT bpd.product_name, bpd.operation_name, bpd.fb_code, bpd.check_user, bpd.create_time, bpd.grade, defect_name, FIRST_VALUE( bpd.defect_name ) OVER ( partition by bpd.product_name order by bpd.create_time desc) as defect_name, bpd.create_time FROM bs_jdi_product_label bpl LEFT JOIN bs_product_defect bpd ON bpl.product_name = bpd.product_name WHERE bpd.product_name in ('SBWV3677LVW','SBWV2230H
in ('SBWV3677LVW','SBWV2230H1K')