从预订数据库表中计算可用资源的数量
我正在做一个项目,我需要存储某种资源的保留。在插入新预订之前,必须检查在指定的时间间隔内是否至少有请求的资源数量。预订以以下模式存储在关系数据库中:
id | owner | timestamp_start | timestamp_end | resource_quantity | 1 | 马特 | 2023/01/15-01:00 | 2023/01/15-02:00 | 40 | 2
---|---|---|---|---|
安德鲁 | 2023/01/15-03:00 | 2023/01/15-10:00 | 30 | |
3 | 玛丽 | 2023/01/15-04:00 | 2023/01/15-07:00 | 10 |
安 | 2023/01/15-05:00 | 2023/01/15-06:00 | 8 | |
米娅 | 2023/01/15-09:00 | 2023/01/15-13:00 | 8 | |
里克 | 2023/01/15-11:00 | 2023/01/15-12:00 | 4 |
给定一个间隔@interval_start和@interval_end(都是时间戳),重叠的行将被发现:
SELECT *
FROM <your table>
WHERE
timestamp_start <= @interval_end AND timestamp_end >= @interval_start
每当有"start"你必须添加资源,并且每次都有一个"结束"。你必须减去资源。因此,您必须有这样的事件序列:
SELECT
timestamp_start as event_timestamp,
resource_quantity
FROM <your table>
WHERE
timestamp_start <= @interval_end AND timestamp_end >= @interval_start
UNION ALL
select
timestamp_end as event_timestamp,
(-1) * resource_quantity as resource_quantity
FROM <your table>
WHERE
timestamp_start <= @interval_end AND timestamp_end >= @interval_start
ORDER BY event_timestamp
此时,您编写了一个过程SQL,它向下滚动该表的行,并从0开始,添加resource_quantity,并保留在给定时间间隔内找到的最大值。
如果你需要,我可以帮你写程序