SQL:在约会中查找每分钟不可用的资源

SQL:在约会中查找每分钟不可用的资源,sql,spring,h2,Sql,Spring,H2,我有一张有开始和结束日期时间的约会表。根据约会的开始和结束时间,每个约会在不同的时间使用不同的机器。一天内可以有许多预约,许多机器都在使用中。如果有足够的机器可用,约会可能会相互重叠。最终用户在(1)开始时间,(2)结束时间,(3)选择时间范围不可用的机器类型之前预定约会(想想outlook上使用ical格式的日历)。我想通过日历向最终用户显示其选择不可用的范围(每分钟精度)。示例:我总共有3个虚拟机,这三个虚拟机都用于约会id=1 用户场景:user1希望在8:00到10:30之间预订机器id

我有一张有开始和结束日期时间的约会表。根据约会的开始和结束时间,每个约会在不同的时间使用不同的机器。一天内可以有许多预约,许多机器都在使用中。如果有足够的机器可用,约会可能会相互重叠。最终用户在(1)开始时间,(2)结束时间,(3)选择时间范围不可用的机器类型之前预定约会(想想outlook上使用ical格式的日历)。我想通过日历向最终用户显示其选择不可用的范围(每分钟精度)。示例:我总共有3个虚拟机,这三个虚拟机都用于约会id=1

用户场景:user1希望在8:00到10:30之间预订机器id为{4,5,10}的约会

08:00 -----               <-|
08:30 |   |                 | 9 total machines are taken during this timeframe
09:00 |x3 | -----           | 
09:30 ----- |   | -----     |
10:00       |   | |   |     |                       
10:30       |x4 | |x2 |   <-|
11:00       ----- |   |
11:30             -----
机器

| id  | starttime           | endtime             |
| --- | ------------------- | ------------------- |
| 1   | 2021-05-21 8:00:00  | 2021-05-21 09:30:00 |
| 2   | 2021-05-21 09:00:00 | 2021-05-21 11:00:00 |
| 3   | 2021-05-21 09:30:00 | 2021-05-21 11:30:00 |
| id  | machinetypeid   | name |
| --- | ----------------| ---- |
| 1   | 4               | pc12 |
| 2   | 4               | pc13 |
| 3   | 4               | pc14 |
| 4   | 3               | vm45 |
| 5   | 3               | vm46 |
| 6   | 3               | vm47 |
| 7   | 1               | gg67 |
| 8   | 1               | gg68 |
| 9   | 1               | gg69 |
| 10  | 1               | gg70 |
预约机器(交叉表)

精度:在后端使用H2 SQL和Spring

| id  | machinetypeid   | name |
| --- | ----------------| ---- |
| 1   | 4               | pc12 |
| 2   | 4               | pc13 |
| 3   | 4               | pc14 |
| 4   | 3               | vm45 |
| 5   | 3               | vm46 |
| 6   | 3               | vm47 |
| 7   | 1               | gg67 |
| 8   | 1               | gg68 |
| 9   | 1               | gg69 |
| 10  | 1               | gg70 |
| id  | appointmentid | machineid   |
| --- | --------------| ----------- |
| 1   | 1             | 3           |
| 2   | 1             | 4           |
| 3   | 1             | 5           |
| 4   | 2             | 1           |
| 5   | 2             | 2           |
| 6   | 2             | 3           |
| 7   | 2             | 7           |
| 8   | 3             | 4           |
| 9   | 3             | 5           |