从预订数据库表中计算可用资源的数量



从预订数据库表中计算可用资源的数量

我正在做一个项目,我需要存储某种资源的保留。在插入新预订之前,必须检查在指定的时间间隔内是否至少有请求的资源数量。预订以以下模式存储在关系数据库中:

tbody> <<tr>2456
id owner timestamp_start timestamp_end resource_quantity
1马特2023/01/15-01:002023/01/15-02:0040
安德鲁2023/01/15-03:002023/01/15-10:0030
3玛丽2023/01/15-04:002023/01/15-07:0010
2023/01/15-05:002023/01/15-06:008
米娅2023/01/15-09:002023/01/15-13:008
里克2023/01/15-11:002023/01/15-12:004

给定一个间隔@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,并保留在给定时间间隔内找到的最大值。

如果你需要,我可以帮你写程序

最新更新