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

PostgreSQL技术问询:按client_name获取每个客户的最后2条记录

解决方案

没问题,咱们可以借助PostgreSQL的窗口函数ROW_NUMBER()来实现每个client_name仅保留最后2条记录的需求,以下是调整后的查询语句:

SELECT timestamp, internal, external, client_name
FROM (
    SELECT 
        timestamp, 
        internal, 
        external, 
        client_name,
        -- 按client_name分组,每组内按时间倒序编号,最新的记录排第1位
        ROW_NUMBER() OVER (PARTITION BY client_name ORDER BY timestamp DESC) AS row_num
    FROM (
        SELECT *, (refno_id || ' - ' || client_name) ref_cl 
        FROM (
            SELECT distinct timestamp::text, internal::int, external::int, refnum 
            FROM reports_jobpull_active_jobss
        ) AS jp_active 
        LEFT JOIN (
            SELECT client_name, refno_id 
            FROM accessibility_ph_refno
        ) AS ph_refno ON jp_active.refnum = ph_refno.refno_id
    ) jp_data 
    WHERE split_part(timestamp::text,' ',1) IN (
        SELECT distinct split_part(timestamp::text,' ',1) date 
        FROM reports_jobpull_active_jobss 
        ORDER BY date DESC LIMIT 10
    )
) ranked_data
-- 只保留每个client_name下最新的2条记录
WHERE row_num <= 2
-- 可选:按客户名+时间正序排列,方便分组查看
ORDER BY client_name, timestamp ASC;

关键逻辑说明:

  • 窗口函数分组排序:ROW_NUMBER() OVER (PARTITION BY client_name ORDER BY timestamp DESC)会把数据按client_name拆分成分组,每组内按照时间戳倒序给记录编号,最新的记录编号为1,次新为2。
  • 筛选Top2记录:外层通过WHERE row_num <= 2,直接过滤掉每个分组内编号大于2的旧记录,只保留最新的2条。
  • 排序优化:最后用ORDER BY client_name, timestamp ASC让结果按客户名分组,每组内的记录从旧到新排列,你也可以根据需求修改排序规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:42:47