使用SQL查找最近的未预订日期
场地预订替代日期查询优化问题
场景
用户选择一个日期,系统检查该日期及时段是否已预订(此部分逻辑正常)。
若该日期及时段已被预订,需为用户展示n个替代日期。要求替代日期尽可能接近用户所选日期,且列表从查询执行当日开始(后端已处理此起始逻辑)。
当前实现代码
SELECT alternative_date FROM GENERATE_SERIES( TIMESTAMP '2022-08-20 05:00:00', date_trunc('month', TIMESTAMP '2022-08-20 07:00:00') + INTERVAL '1 month - 1 day', INTERVAL '1 day' ) AS G(alternative_date) WHERE NOT EXISTS( SELECT * FROM events T WHERE T.bookDate::DATE = G.alternative_date::DATE )
这段PostgreSQL代码通过GENERATE_SERIES生成从2022-08-20到8月底的日期序列,筛选出events表中bookDate未记录的日期(即未被预订的日期)。
待解决的三个核心问题
- 结合用户偏好预订日期,如何筛选出最接近的可选替代日期?这是当前首要难题。
- 如何关联用户指定的开始/结束时间,明确告知用户替代日期的对应时段是否有空位?需给出解决方向。
- 尝试添加判断场地是否开放的WHERE条件时,与现有NOT EXISTS条件结合执行失败,需修复该逻辑。
内容的提问来源于stack exchange,提问作者user15042889
相关产品推荐
相关产品推荐

