首页 > 解决方案 > 随时间推移访问 SQL 查询

问题描述

我目前正在跟踪 12 小时内每小时有多少员工在工作。我可以通过使用一个包含开始时间和结束时间的表格以及一个从早上 5 点到下午 5 点在 12 小时内每小时有 1 个条目的表格来做到这一点。我很好奇是否有一种方法可以在不必创建时间表的情况下进行时间间隔。

SELECT COUNT(IIF(ISNULL(Start_Name), End_Name, Start_Name)) AS Total, lookup_time
FROM tblWorkers5to17, TimeTable
WHERE lookup_time BETWEEN IIF(ISNULL(Start_Time), TimeValue(#05:00#),TimeValue([Start_Time])) AND IIF(ISNULL(End_Time), TimeValue(#17:00#), TimeValue([End_Time]))
GROUP BY lookup_time;

这给了我我需要的东西,但是,我希望有一种方法可以避免使用时间表,如果我想要不同的间隔,我可以更容易地改变。

谢谢!

标签: sqlms-access

解决方案


本质上,时间表必须存在。但是,您可以使用递归和公用表表达式动态创建该时间表,因此您不必手动创建此表......但答案可能取决于您使用的 SQL RDBMS。你能指定你正在使用什么样的 SQL 系统吗?

这只是个人喜好,但我会花时间让 TimeTable 的存在尽可能向后追溯,直到 20 年后才有意义。然后我会索引它并完成它。然后,您可以在每次运行时将 WHERE 子句过滤到您关心的时间。但是有些人可能更喜欢在每次运行时动态创建一个新的 TimeTable,但它没有存储在您的架构中。


推荐阅读