【问题标题】:Postgres Check availabilty overlapping datesPostgres 检查可用性重叠日期
【发布时间】:2023-03-22 04:53:02
【问题描述】:

我需要一种方法来找出物品何时可以使用。这些物品会保留一段时间,时间长短因客户的需要而异。 我需要一种方法来找出在某个时间范围内可用的内容。

我查看了重叠和 >、

小部件表

| id | color  | length | purchase_date | in_date  |
|----|--------|--------|---------------|----------|
| 1  | red    | 1.5    | 07/02/15      | 08/22/19 |
| 2  | red    | 2      | 07/02/15      | 08/22/19 |
| 3  | blue   | 1.5    | 08/15/14      | 08/22/19 |
| 4  | blue   | 2      | 08/15/14      | 08/20/19 |
| 5  | green  | 1.5    | 06/22/15      | 08/20/19 |
| 6  | green  | 2      | 08/15/14      | 08/20/19 |
| 7  | yellow | 1.5    | 07/02/15      | 08/17/19 |
| 8  | yellow | 2      | 05/04/17      | 08/17/19 |
| 9  | purple | 1.5    | 05/04/17      | 08/30/19 |
| 10 | purple | 2      | 07/02/15      | 08/30/19 |

贷款表

| loan_id | widget_id | client_id | out_date | in_date  |
|---------|-----------|-----------|----------|----------|
| 1       | 1         | 101       | 08/12/19 | 08/22/19 |
| 2       | 3         | 101       | 08/12/19 | 08/22/19 |
| 3       | 5         | 101       | 08/12/19 | 08/22/19 |
| 4       | 2         | 102       | 08/15/19 | 08/20/19 |
| 5       | 4         | 102       | 08/15/19 | 08/20/19 |
| 6       | 10        | 103       | 08/16/19 | 08/20/19 |
| 7       | 8         | 104       | 08/15/19 | 08/17/19 |
| 8       | 9         | 104       | 08/15/19 | 08/17/19 |
| 9       | 1         | 105       | 08/23/19 | 08/30/19 |
| 10      | 2         | 105       | 08/23/19 | 08/30/19 |
| 11      | 7         | 106       | 08/23/19 | 08/28/19 |
| 12      | 3         | 106       | 08/23/19 | 08/28/19 |
| 13      | 5         | 107       | 08/18/19 | 08/22/19 |
| 14      | 8         | 107       | 08/18/19 | 08/22/19 |
| 15      | 1         | 101       | 09/02/19 | 09/09/19 |
| 16      | 7         | 101       | 09/02/19 | 09/09/19 |
| 17      | 6         | 101       | 09/02/19 | 09/09/19 |
| 18      | 8         | 108       | 08/26/19 | 09/06/19 |
| 19      | 10        | 108       | 08/26/19 | 09/06/19 |
| 20      | 4         | 108       | 08/26/19 | 09/06/19 |
| 21      | 9         | 109       | 08/22/19 | 08/27/19 |
| 22      | 2         | 109       | 08/22/19 | 08/27/19 |
| 23      | 3         | 110       | 09/04/09 | 09/11/19 |
| 24      | 5         | 110       | 09/04/19 | 09/11/19 |

该项目不能在签入的同一天签出。 因此,例如,我需要检查 8/21 和 8/26(如果有)之间可用的内容以及 9/8 和 9/14 之间可用的内容。 我们正在与数百家合作,并希望提前几周或几个月开始预订,目前是一两周。 我暂时只需要从小部件表中获取链接到贷款表 widget_id 的 ID。

【问题讨论】:

  • 请尽量减少示例。是否真的有必要查看每张表的 24 条记录才能理解您的问题?此外,请添加预期的输出!
  • 您必须使用时间戳范围数据类型在表上定义排除约束。 ALTER TABLE loan ADD CONSTRAINT widget_time_idx EXCLUDE USING gist (widget_id WITH =, (tstzrange(in_date, out_date)) WITH &&);
  • 是的,它显示了数据的可变性

标签: postgresql


【解决方案1】:

选择 id、颜色、长度 从小部件 id 不在的地方 (从贷款中选择widget_id 其中(start_date = @end_date) 或 (start_date = @end_date) 或(@start_date = start_date) ) 这是我引用的页面:

SQL query to search for room availability

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    相关资源
    最近更新 更多