一、原始表内容如下:
某个条码 被多个站点 site_id, 记录多次(比如site_id=89),则产生多条记录。
如果想得到89号站点的最新记录 的同时,并获取其它相关信息。
二、sql 语句
思路:
先取站点号89,再对条码进行分组,再对时间进行排序
再取出里面的第一条。
select s.site_id,s.id, s.wo_no,s.serial_no,s.attr01 PART_Q1,s.creation_date
from (
select v.*, row_number() over (partition by serial_no order by creation_date desc) as idx
from wip_sn_collection_info v
where v.SITE_ID='89'
) s
where s.idx = 1
and s.serial_no like 'CETCM6041DL503648'
三、讲解
1、用分析函数row_number() 来给分组内的记录编号,然后取编号值为1的记录即可。()
2、partition 的意思是对数据进行分区
3、order by creation_date desc 按时间进行排序,desc从最大值到最小值 ,不写(默认)从最小值到最大值。
4、对于本项目,里面select 的条件,一定要写完整。比如where v.SITE_ID='89',应该放在里面,不应放在外面。因为其它站点也有相同的serial_no ,应该区分开来。也就是说。分区的条件 要保证正确性。