【发布时间】:2014-04-13 20:44:47
【问题描述】:
请注意:这不是针对 Access 项目本身,而是针对后端使用 Access 数据库的遗留应用程序。
设置
该应用程序的一部分是一种甘特图,固定为单日列,其中每一行代表一个资源。资源被预订了一段时间,并且预订是针对单个资源的,因此它们不能连续重叠。视图中的日期范围是用户可选择的、开放式的,并且可以通过各种方法进行更改,包括使用鼠标或键盘进行水平滚动。
问题
我的任务是在图表顶部添加一行以指示每天的总体资源使用情况。当然,通过简单地分别查询范围内的每一天,这很容易做到,但不幸的是,这被证明是一个昂贵的过程,因此会大大减慢水平滚动速度。所以我正在寻找一种更有效的方法,希望能减少数据库读取。
这是一个高度简化的预订表示例:
booking_ID | start_Date | end_Date | resource_ID
----------- -------------- ------------- -------------
1 2014-07-17 2014-07-20 21
2 2014-08-24 2014-08-29 4
3 2014-08-26 2014-09-02 21
4 2014-08-28 2014-09-04 19
理想情况下,我想要一个查询,该查询返回指定范围内的每一天,以及那些日子有多少预订。因此从 2014 年 7 月 17 日开始查询上述 20 天的数据会产生这样的结果:
check_Date | resources_Used
----------- ---------------
2014-07-17 1
2014-07-18 1
2014-07-19 1
2014-07-20 1
2014-07-21 0
2014-07-22 0
2014-07-23 0
2014-08-24 1
2014-08-25 1
2014-08-26 2
2014-08-27 2
2014-08-28 3
2014-08-29 3
2014-08-30 2
2014-08-31 2
2014-09-01 2
2014-09-02 2
2014-09-03 1
2014-09-04 1
2014-09-05 0
我可以通过使用整数表(从 0 开始)来获取范围内的日期列表,其中:
SELECT CDATE('2014-07-17') + ID AS check_Date FROM Integers WHERE ID < 20
我可以通过以下方式获取一天使用的资源数量:
SELECT COUNT(*) AS resources_Used
FROM booking
WHERE start_Date <= CDATE('2014-09-04')
AND end_Date >= CDATE('2014-09-04')
但我不知道如何(或是否)将它们结合在一起以获得所需的结果。这甚至可能吗?
【问题讨论】: