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