更新:私のアルゴリズム(またはそのことについては任意のアルゴリズム)のすべてのエッジケースのデータを計算する手法を探しています。
私がこれまでに試したのは、エッジケースと「ランダムな」データの生成について考えているだけですが、実際のユーザーが混乱させる可能性のあるものを見逃さなかったと確信できる方法がわかりません。
アルゴリズムで重要なことを見逃していないことを確認したいのですが、考えられるすべての状況をカバーするテストデータを生成する方法がわかりません。
タスクは、すべてのデータのスナップショットを報告することですが、入力および出力データの図で、次Event_Date
のデータに属する可能性のある編集用に別の行を作成します-グループ2)を参照してください:Event_Date
私のアルゴリズム:
- sのリストを作成し、それらの
event_date
sを計算しますnext_event_date
- 結果を結合して、各スナップショット
main_audit_table
の最大値を計算しtransaction_id
ます(私の図のグループ1〜4)-、によってグループ化されid
、trueevent_date
かどうかに基づいて2つのオプションによってグループ化されますtransaction_date < next_event_date
- 結果に参加
main_audit_table
して、同じものから他のデータを取得しますtransaction_id
- 結果に参加する-結果よりも小さい
costs_audit_table
最大のものを使用するtransaction_id
transaction_id
私の質問:
- 考えられるすべてのシナリオをカバーするテストデータを生成するにはどうすればよいので、アルゴリズムが正しいことがわかりますか?
- 私のアルゴリズムロジックに間違いがありますか?
- この種の質問のためのより良いフォーラムはありますか?
私のコード(テストする必要があります):
select
snapshots.id,
snapshots.event_date,
main.event,
main.transaction_date as last_change,
costs.costs as costs_2012
from (
--snapshots that return correct transaction ids grouped by event_date
select
main_grp.id,
main_grp.event_date,
max(main_grp.transaction_id) main_transaction_id,
max(costs_grp.transaction_id) costs_transaction_id
from main_audit_table main_grp
join (
--list of all event_dates and their next_event_dates
select
id,
event_date,
coalesce(lead(event_date) over (partition by id order by event_date),
'1.1.2099') next_event_date
from main_audit_table
group by main_grp.id, main_grp.event_date
) list on list.id = main_grp.id and list.event_date = main_grp.event_date
left join costs_audit_table costs_grp
on costs_grp.id = main_grp.id and
costs_grp.year = 2012 and
costs_grp.transaction_id <= main_grp.transaction_id
group by
main_grp.id,
main_grp.event_date,
case when main_grp.transaction_date < list.next_event_date
then 1
else 0 end
) snapshots
join main_audit_table main
on main.id = snapshots.id and
main.transaction_id = snapshots.main_transaction_id
left join costs_audit_table costs
on costs.id = snapshots.id and
costs.transaction_id = snapshots.costs_transaction_id