我正在为我们公司正在做的笔记本电脑更新编写一个预订系统。我需要能够计算哪些日子有可用的插槽并将它们返回以在日历控件上呈现(即,如果一天有可用的日子它是可选的,否则不是。
逻辑如下:
- 技术人员每天可以制造 3 台笔记本电脑。
- 任何一天都可能有 1、2 或 3 名技术人员可用。
- 一张桌子将保存已经进行的预订
每天可用槽的总数是(伪代码):
((laptops per day) * (technicians available)) - slots already booked
我的问题是,得出这个的最有效方法是什么?我想它最好在 SQL 端完成,它有一个函数来返回一个带有可用插槽的日期表。(不管有多少,只要至少有一个插槽可用。)
到目前为止,我可以理解所有这些。我坚持的一点是,我不想拥有所有可能日期的表格,因为它似乎效率低下。我想要做的是有效地迭代从现在到未来 3 个月之间的一系列日期,并从那里计算可用日期。
我可以在 c# 中执行此操作,但它让我觉得效率低下,因为它必须每天都在访问 SQL 服务器。在 SQL 方面似乎更好,但我不知道如何以这种方式迭代可能的日期。
到目前为止的解决方案
使用@Chris 的方法,我可以获得插槽书不超过设定最大值的日期范围:
DECLARE @startDate DATE
DECLARE @endDate DATE
SET @startDate = GETDATE()
SET @endDate = DATEADD(m,3,@startDate)
;
WITH dates(Date) AS
(
SELECT @startdate as Date
UNION ALL
SELECT DATEADD(d,1,[Date])
FROM dates
WHERE DATE < @enddate
)
SELECT Date
FROM dates
EXCEPT
SELECT date
FROM tl_sb_booking
GROUP BY date
HAVING COUNT(date) < 3
这只是设置任意最多 3 个预订。下一步是添加技术人员可用性!