簡介
>對于每個購買交易,創建一個參考號。
例如:參考號是pt-stur-2025-1。
在其中的結構:
- > pt:是事務類型
- stur:是基于業務域
- 2025:交易的一年
- 1:唯一生成的數字將對創建的每個交易進行自動增量。
>
的代碼
>
>理想情況下,將是這樣的:pt-stur-2025-1,pt-stur-2025-2,pt-stur-2025-3等…
>
問題
當服務器已經生成唯一號碼并且創建錯誤時,將跳過參考號。
>我的任務是告訴用戶什么是缺少的參考號。
>
解決方案
>通過凝視并訂購了一個參考號,可以找到,但需要時間。
>
這是獲取解決方案的步驟:
>
步驟1。找到可能的模式
select regexp_substr(reference_no, '^(.*?)-(.*?)-(.*?)-(.*?)') as 'pattern', count(*) from purchase_transaction pt group by pattern order by id asc;
select regexp_substr(reference_no, '^(.*?)-(.*?)-(.*?)-(.*?)') as 'pattern', count(*) from purchase_transaction pt group by pattern order by id asc;
假設參考號始終具有3個破折號’ – ‘,現在可以嘗試找到模式的發生
步驟2。獲取下一個唯一生成的數字
select reference_no, regexp_substr(reference_no, '([0-9]+)$') as 'current_ref_no', lead(regexp_substr(reference_no, '([0-9]+)$')) over (order by id asc) as 'next_ref_no' from purchase_transaction ai where reference_no like 'pt-stur-2025-%' order by id asc;
“ regexp_substr(reference_no,’([[0-9] )$’))是需要的,因為只需要在參考號的最高后綴中找到該號碼,就不想獲得這一年。
獲得下一個參考號的關鍵是使用鉛…
> lead(regexp_substr(reference_no,’([0-9] )$’))over(id asc訂購)為’next_ref_no’ 它告訴sql查看下一行的數據。在上面()內部,需要按id訂購以找到順序行。
因此,這是輸出:
步驟3。找到跳過的起始參考號
如果沒有跳過的數字,則表示當前數與下一個數字之間的差異為1。但是,如果有跳過,則差異將不止一個。因此,這是找到的公式:
> next_ref_no -current_ref_no > 1
sql:
WITH FIND_THE_NEXT as ( SELECT id, reference_no, REGEXP_SUBSTR(reference_no, '([0-9]+)$') as 'current_ref_no', LEAD(REGEXP_SUBSTR(reference_no, '([0-9]+)$')) OVER (order by id asc) as 'next_ref_no' FROM purchase_transaction ai WHERE reference_no like 'PT-STUR-2025-%' order by id asc )select reference_no, next_ref_no, case when next_ref_no - current_ref_no > 1 THEN concat('missing ', (next_ref_no - current_ref_no - 1), ' until ', (next_ref_no - 1)) ELSE 'ok' END as 'is_missing' from find_the_next order by id asc;
這是輸出:
>從上面,已知已知的丟失參考號是什么。