Как сгенерировать тестовые данные для алгоритма «группировать по данным из других строк» ​​

ОБНОВЛЕНИЕ:Я ищу метод вычисления данных для всех пограничных случаев моего алгоритма (или произвольного алгоритма для этого материя ).
То, что я пробовал до сих пор , это просто размышления о том, что может быть пограничными случаями + создание некоторых «случайных» данных, но я не знаю, как я могу быть более уверенным, что я не пропустил что-то, что настоящие пользователи будут знать. способный напортачить..

Я хочу проверить, не упустил ли я что-то важное в своем алгоритме, и я не знаю, как сгенерировать тестовые данные, чтобы охватить все возможные ситуации:

Задача состоит в том, чтобы сообщить снимки данных для каждого Event_Date, но сделать отдельную строку для правок, которые могут принадлежать следующемуEvent_Date-см. Группу 2 )на иллюстрации ввода и вывода данных:

input and output data illustration

My алгоритм:

  1. составить список event_dates и вычислить для них next_event_dates
  2. объединить результаты с main_audit_tableи вычислить наибольший transaction_idдля каждого снимка (Группы 1 -4 на моей иллюстрации)-сгруппированы по id, event_dateи по 2 вариантам в зависимости от того, верно ли transaction_date < next_event_dateили нет
  3. присоединить main_audit_tableк результатам, чтобы получить другие данные из того жеtransaction_id
  4. присоединяем 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
5
задан Aprillion 7 May 2012 в 13:00
поделиться