gpt4 book ai didi

Mysql 函数获取某个范围内的可用单位

转载 作者:行者123 更新时间:2023-11-29 18:14:25 32 4
gpt4 key购买 nike

我正在寻找适合我的特定问题的函数。

我有一台系统租赁电脑。每个 PC 型号都有一定的数量,例如 ACER XY = 7 台。东芝 ZZ = 5 台...

用户可以选择一个范围日期(带时间)和该范围内的租金的(或多个)PC型号。

例如从2017-12-01 T 13:10.....到.......2017-12-05 T 21:00...与ACER XY(2 套出租)

我的功能是在数据库内搜索是否在此范围内有此 PC 型号的租赁条目,并返回 true 或 false 以提交表单。 (在此示例中,最多接受 5 个条目...导致 7 个总单位减去 2 个出租 = 5)。

我不知道如何处理。

例如,如果在数据库中我已经有 2 个连续事件 + 1 个重叠事件,例如:

2017-12-02 T 13:10 to  2017-12-05 T 21:00 with ACER XY quantity 1 customer AA
2017-12-05 T 21:00 to 2017-12-07 T 11:00 with ACER XY quantity 3 customer BB
2017-12-07 T 09:00 to 2017-12-09 T 08:00 with ACER XY quantity 3 customer CC

......................

如果我尝试插入 2017-12-01 T 13:10.....to.......2017-12-05 T 21:00...与 ACER XY (2 单位出租)我需要返回 TRUE

如果我尝试使用2017-12-01 T 13:10.....到.......2017-12-05 T 21:10...与ACER XY (5 单位出租)我需要返回 FALSE

如果我尝试使用2017-12-01 T 13:10.....到.......2017-12-07 T 08:59...与ACER XY (2 单位出租)我需要返回 TRUE

如果我尝试使用2017-12-01 T 13:10.....到.......2017-12-07 T 09:01...与ACER XY (2 单位出租)我需要返回 FALSE

我希望这个例子很好理解?

我的表格(简化):

Table RentalTimeline:
ID (INT), start (DATETIME), end (DATETIME), pc_id (INT), quantityForRent (INT), customer_ID (INT)

Table PC:
ID (INT), ModelName (varchar), QuantityAvailableTotal (INT)

更新:@Juan Carlos Oropeza 我认为解决方案不起作用,因为如果我遇到这种情况:共有 7 台 PC ACER 可用

这 3 个事件已经在数据库中(我删除了时间以简化):

2017-12-02 to  2017-12-15 with ACER quantity 1 customer AA
2017-12-05 to 2017-12-06 with ACER quantity 3 customer BB
2017-12-07 to 2017-12-09 with ACER quantity 3 customer CC

我尝试插入一个事件:

2017-12-01 to  2017-12-20 with ACER quantity 1

使用@Juan Carlos Oropeza 解决方案,我将得到 FALSE,因为我 future 的新条目将涵盖已插入的所有 3 个事件...并且 SUM 等于 7(我的最大 PC 可用),但 2 个事件是在这种情况下,我需要依次返回 TRUE (因为从 12-01 到 12-01 我将有 1 台 PC(新插入的),从 12-02 到 12-04 我将有 2 台 PC(1+1 新插入) ),从 12-05 到 12-06 我将有 5 件(1+3+1new),从 12-07 到 12-09 我将有 5 件(1+3+1new),从 12-10到 12-15 我将有 2 件(1+1 新),从 12-16 到 12-20 我将有 1 件(1 新))

最佳答案

我找到了这个function

CREATE PROCEDURE make_intervals(startdate timestamp, 
enddate timestamp,
intval integer,
unitval varchar(10))

因此,对于您的示例,您将调用:

call make_intervals('2017-12-02 00:00:00','2017-12-07 00:00:00', 1,'HOUR');

创建一个间隔为 1 小时的表 time_intervals。为该日期范围创建 120 个间隔。如果您设置间隔 MINUTE 将创建 7200 个间隔。

因此,要检查您是否已经在该范围内使用了太多 PC,您的查询应该是:

<强> SQL DEMO

SELECT t.interval_start, 
t.interval_end,
SUM(qty)
FROM RentalTimeline R
JOIN time_intervals T
ON t.interval_start <= r.end
AND t.interval_end >= r.start
GROUP BY t.interval_start,
t.interval_end
HAVING SUM(qty) > 6
-- 6 is Number of PC available - Number of PC request for new customer

您还需要加入您的 PC 表来过滤与客户请求的型号相关的范围。

关于Mysql 函数获取某个范围内的可用单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47145600/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com