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

PostgreSQL查询:识别12个月内重复预订航班的用户

调整PostgreSQL查询以统计12个月内有多次航班预订的用户

没问题,我来帮你把原来的查询改成符合12个月时间范围需求的版本!

原来的语句只是单纯统计所有预订次数≥2的用户,但完全没考虑时间限制——哪怕用户的两次预订间隔了好几年,也会被算进去,这显然不符合你现在的需求。

这里给你一个精准的解决方案,用窗口函数来捕捉用户的相邻预订时间差:

SELECT COUNT(DISTINCT s.customer)
FROM (
    SELECT 
        customer,
        flight_date,
        -- 按用户分组、预订时间排序,获取上一次的预订日期
        LAG(flight_date) OVER (PARTITION BY customer ORDER BY flight_date) AS prev_flight_date
    FROM sales
) s
-- 排除每个用户的第一条预订记录,只看有前后两次的情况
WHERE s.prev_flight_date IS NOT NULL 
  -- 筛选两次预订间隔不超过12个月的记录
  AND s.flight_date - s.prev_flight_date <= INTERVAL '12 months';

关键说明:

  • 内层的LAG()窗口函数是核心:它会为每个用户的每一条预订记录,匹配到该用户上一次的预订日期,前提是我们按用户分组、按预订时间排序。
  • 外层筛选时,我们只保留那些有上一次预订(排除首次预订)且两次间隔≤12个月的记录,最后通过COUNT(DISTINCT)统计唯一用户数——避免同一用户有多次符合条件的预订被重复计数。
  • 注意:如果你的预订日期字段不是flight_date,记得替换成你表中的真实字段名哦。

如果你的需求是“用户在任意连续12个月的窗口内存在多次预订”,上面的查询也完全适用,因为它会捕捉到所有存在相邻预订间隔≤12个月的用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:07:42