私はロジスティクスカンパニーの仕事をしており、各貨物には7桁のプロナンバーをあらかじめ決められた順序で持っていなければなりません。だから私たちは数字に隙間があることを知っていますが、システムを照会して何が欠けているかを知る方法はありますか?テーブルに不足している数字をクエリできる方法はありますか?
したがって、列名trace_numberに存在しない1000000〜2000000の数字をすべて表示してください。
このように、シーケンスは1024397,1024398,1051152になりますので、26kプロ番号のかなりの差があることがわかりますが、それでもギャップを照会するにはどうしますか?
Select t.trace_number,
integer(trace_number) as number,
ISNUMERIC(trace_number) as check
from trace as t
left join tlorder as tl on t.detail_number = tl.detail_line_id
where left(t.trace_number,1) in ('0','1','2','3','4','5','6','7','8','9')
and date(pick_up_by) >= current_date - 1 years
and length(t.trace_number) = 7
and t.trace_type = '2'
and site_id in ('SITE5','SITE9','SITE10')
and ISNUMERIC(trace_number) = 'True'
order by 2
fetch first 10000 rows only
ではなく、私が...コメントとしてそれを残して一時テーブルを作成し、移入ますので、かなりの答えそれは1000000から2000000までのあらゆる数で(単純なループを使用してデータを取り込みます)このテンポラリテーブルを持ち、traceへの結合をleftにすると、trace.tracenumberがnullの場合、すべての '未使用'の番号が返されます。 – Twelfth
PostgreSQLでは、各ギャップ範囲の開始点を取得するために 'SELECT t.trace_number + 1 FROM trace t WHERE NOT EXISTS(SELECT 1 FROM trace as t2 WHERE t2.trace_number = t.trace_number + 1)'を使うことができます。おそらくDB2は同様のことを許しています。同様のクエリがエンドポイントを取得する可能性があります。この2つのクエリを 'UNION 'し、' trace_number'でソートすることで、奇数行のギャップ開始位置と偶数行のギャップ終了位置を取得できます。 –
かなり一般的な問題、google * sqlのギャップと島* – Charles