Apr*_*ion 5 sql testing algorithm greatest-n-per-group data-generation
更新:我正在寻找一种技术来计算我的算法的所有边缘情况(或任意算法)的数据.
我到目前为止所尝试的只是考虑可能是边缘情况+产生一些"随机"数据,但我不知道我怎么能更确定我没有错过真正的用户将能够弄乱的东西..
我想检查一下我没有错过我的算法中的重要内容,我不知道如何生成测试数据来涵盖所有可能的情况:
该任务是报告每一个数据快照Event_Date,但要单独一行,可能属于编辑下一个Event_Date -见第2组)对输入和输出数据说明:

我的算法:
event_dates和计算列表next_event_datemain_audit_table并计算最大的transaction_id为每个快照(第1-4组在我的插图) -通过细分电子邮件id,event_date并根据是否2个选项transaction_date < next_event_date是真还是假main_audit_table结果以获取相同的其他数据transaction_idcosts_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
Run Code Online (Sandbox Code Playgroud)
公用表表达式 (CTE) 不仅是消除复杂性并减少较长 SQL 片段重复的好方法,而且还是表示测试数据的简单方法,就好像它来自永久表一样。至少,CTE 会将查询的主要组成部分集中在顶部,允许您在语句的其余部分通过标签来引用它们。Graeme Birchall 的DB2 SQL Cookbook(一本维护良好的免费电子书)提供了有关此模式和其他高级 SQL 模式的一些很好的示例。Joe Celko 是关于如何让 SQL 为您完成更多繁重工作的另一个很好的想法来源。
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |