我需要在现有的时间表数据库应用程序之上构建一些查询,以用于特定项目目的。
我可以从
的时间表数据库中删除数据USER_ID | ENTRY_DATE | BILLED_HRS
然后将项目组织图表映射为我拥有的数据:
USER_ID | PROJECT_ROLE | START_DATE | FINISH_DATE
在START_DATE和FINISH_DATE之间加入这两者的最佳方法是将HRS映射到PROJECT_ROLE的唯一方法。
可能只有5-10个USER_ID会有多个角色,所以可能有办法快速跟踪这个。我无法修改基础时间表应用程序表,因此此连接需要足够快以便定期运行。
谢谢
答案 0 :(得分:2)
您正在寻找的基本查询类似于:
SELECT ts.*, po.project_role
FROM timesheet ts
LEFT JOIN project_organization po ON
po.user_id = ts.user_id AND
ts.entry_date BETWEEN po.start_date AND po.finish_date
我会留下LEFT JOIN,以确保即使您没有匹配任何project_role,也不会丢失时间表数据。但要小心......如果项目组织表的行与同一user_id的start_date和finish_date重叠,则会得到重复的时间表数据。对于INNER和OUTER JOIN,这是不可避免的。
关于此查询的效率,它很大程度上取决于您拥有的索引。
作为个人建议......我建议定期(可能每晚)提取数据并在另一个数据库中复制以用于报告目的。通过这种方式,您可以检查它(显示与没有project_role匹配或匹配多个project_role的数据的警告)并清理它(直接在时间表数据表中写入project_role)。当然,如果要对实时数据运行查询,则无法执行此操作。但我也认为时间表数据每天输入的次数不超过一次,因此它可能是最好的解决方案。