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

如何在PostgreSQL中实现循环查询,一次性获取90天配送统计数据

核心实现思路

不用在PostgreSQL中写循环,直接用内置的generate_series函数动态生成未来90天的连续日期序列,代替你JS层循环调用的逻辑,一次性关联查询出所有结果:

  • 无需额外维护静态配送日期表,日期序列随查询动态生成
  • 单次查询即可返回全量数据,避免90次数据请求的IO开销
  • 结果直接按日期聚合,无需JS层额外拼接处理
完整SQL示例
WITH future_delivery_dates AS (
    -- 生成从当前日期开始的未来90天连续配送日期,如需从明天开始可把CURRENT_DATE改为CURRENT_DATE+1
    SELECT generate_series(
        CURRENT_DATE,
        CURRENT_DATE + INTERVAL '89 days',
        INTERVAL '1 day'
    )::DATE AS delivery_date
)
SELECT
    fdd.delivery_date,
    pt.product_name,
    COUNT(ot.order_id) AS delivery_quantity
FROM future_delivery_dates fdd
-- 关联订单表匹配对应配送日期的订单
LEFT JOIN order_table ot
    ON ot.scheduled_delivery_date = fdd.delivery_date
-- 关联商品表获取商品名称
LEFT JOIN product_table pt
    ON ot.product_id = pt.product_id
-- 关联客户表,匹配当日处于休假状态的客户
LEFT JOIN customer_table ct
    ON ot.customer_id = ct.customer_id
    AND ct.vacation_start_date <= fdd.delivery_date
    AND ct.vacation_end_date >= fdd.delivery_date
-- 过滤掉休假客户的订单
WHERE ct.customer_id IS NULL
-- 按日期、商品分组统计配送量
GROUP BY fdd.delivery_date, pt.product_name
-- 按日期排序,返回结果可直接转为你需要的对象数组结构
ORDER BY fdd.delivery_date, pt.product_name;
可调整规则说明
  • 若需要返回无配送记录的日期(对应商品数量为0),可将日期序列先和全量商品表做交叉关联,再左连订单表即可
  • 若客户休假的存储逻辑不是起止日期格式,自行调整customer_table的关联过滤条件即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:24:03