一、原始表內容如下:
某個條碼 被多個站點 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 ,應該區分開來。也就是說。分區的條件 要保證正確性。