You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB按特殊条件查询时间段 新增service=0规则结果不符问题

解决方案

整合后完整规则

  • 当日无service为1或3的时段:返回当日全部时段
  • 当日存在service为1或3的时段:返回这些时段之前的所有时段
  • 当日存在service为0的时段:额外返回该时段之后的所有时段

调整思路

你只需要在原有筛选逻辑的基础上,补充service=0对应时段的判断条件即可,核心逻辑是先计算两个临界时间点:

  1. cutoff_1_3:所有service为1/3的时段的最小值,不存在则设为当日23:59:59(保证所有时段都满足小于该值的条件,兼容原有逻辑)
  2. cutoff_0:所有service为0的时段的最大值,不存在则设为当日00:00:00(保证不会额外返回多余时段,不影响原有逻辑)

最终筛选条件为:时段 < cutoff_1_3 OR 时段 > cutoff_0

代码示例

假设你的表名为timeslots,存储时段的字段为slot_time(datetime类型),service字段为service,参考代码如下:

WITH query_params AS (
    -- 统一指定要查询的日期,可按需修改
    SELECT '2021-07-07' AS target_date
),
time_cutoffs AS (
    SELECT
        -- 计算service1/3的最早时间阈值
        COALESCE(MIN(CASE WHEN service IN (1,3) THEN slot_time END), CONCAT(target_date, ' 23:59:59')) AS cutoff_1_3,
        -- 计算service0的最晚时间阈值
        COALESCE(MAX(CASE WHEN service = 0 THEN slot_time END), CONCAT(target_date, ' 00:00:00')) AS cutoff_0
    FROM timeslots, query_params
    WHERE DATE(slot_time) = target_date
)
SELECT slot_time
FROM timeslots, query_params, time_cutoffs
WHERE DATE(slot_time) = target_date
  AND (slot_time < cutoff_1_3 OR slot_time > cutoff_0)
ORDER BY slot_time;

效果验证

对应你给出的测试场景,上述语句会同时返回2021-07-07 14:00:00和2021-07-07 16:00:00,完全符合预期。

内容的提问来源于stack exchange,提问作者Trombone0904

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 06:33:01