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

PostgreSQL查询:按队列忽略每日(18:00起)前2条数据

解决方案

核心思路是按队列+自定义周期(18:00起始的日)分组,在每个分组内忽略前2条数据。具体步骤如下:

  1. 转换纳秒级时间戳为PostgreSQL可识别的timestamp类型;
  2. 计算自定义周期的日期:将时间戳减去18小时后取日期,这样当天18:00到次日18:00的所有记录会被归为同一个周期;
  3. 用row_number()按队列和周期日期分区排序,过滤掉每个分区内的前2条。

完整查询代码:

SELECT id, queue, "timestamp"
FROM (
  SELECT 
    id,
    queue,
    "timestamp",
    row_number() OVER (
      PARTITION BY queue, DATE(to_timestamp("timestamp"/1000000000) - INTERVAL '18 hours')
      ORDER BY "timestamp"
    ) AS row_n
  FROM mytable
) results
WHERE row_n > 2;

逻辑验证(对应示例数据)

以q2为例:

  • 周期2023-01-14包含id5(18:30)、id6(20:30)、id7(次日05:30)、id8(次日17:10),前2条被过滤,保留id7、id8;
  • 周期2023-01-18包含id9(18:50)、id10(20:50)、id11(次日02:50)、id12(次日12:50),前2条被过滤,保留id11、id12;
    q1的周期2023-01-14包含id1、id2、id3,前2条被过滤,保留id3;
    q3的周期2023-01-14只有2条记录,全部被过滤,无结果。

最终结果与预期一致:id3、7、8、11、12。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:32:27