更新:我正在寻找一种技术来计算我的算法(或任意算法)的所有边缘情况的数据。到目前为止
,
我尝试的只是考虑可能是边缘情况+产生一些“随机”数据,但我不知道如何才能更确定我没有错过真正用户能够搞砸的东西..
我想检查一下我的算法中没有遗漏一些重要的东西,而且我不知道如何生成测试数据来涵盖所有可能的情况:
任务是报告每个数据的快照,Event_Date
但为可能属于下一个Event_Date
的编辑创建单独的行- 请参阅第 2 组)输入和输出数据插图:
我的算法:
- 列出s 并为它们
event_date
计算snext_event_date
- 将结果加入
main_audit_table
并计算transaction_id
每个快照的最大值(我的插图中的第 1-4 组) -根据是否为真id
,由 和 2 个选项分组event_date
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