ОБНОВЛЕНИЕ: я ищу способ вычисления данных для всех пограничных случаев моего алгоритма (или произвольного алгоритма, если на то пошло).
Что я пробовал до сих пор просто думает о том, какие могут быть пограничные случаи + создание некоторых «случайных» данных, но я не знаю, как я могу быть более уверенным, что не пропустил что-то, что настоящие пользователи могут испортить..< /я>
Я хочу проверить, не пропустил ли я что-то важное в своем алгоритме, и я не знаю, как сгенерировать тестовые данные, чтобы охватить все возможные ситуации:
Задача состоит в том, чтобы сообщить снимки данных для каждого Event_Date
, но сделать отдельную строку для правок, которые могут относиться к следующим Event_Date
— см. Группу 2) на входе и выходе < strong>иллюстрация данных:
Мой алгоритм:
- составить список
event_date
и вычислить для нихnext_event_date
- присоединяем результаты к
main_audit_table
и вычисляем самые большиеtransaction_id
для каждого снимка (группы 1-4 на моем рисунке) - сгруппированные поid
,event_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