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

如何基于另一查询的最新write_date排序PostgreSQL查询结果?

解决方案:关联查询并按最新聊天日期排序

你可以通过子查询聚合+关联表的方式实现需求,先获取每个sales_sourcing记录对应的最新聊天write_date,再用这个日期对主查询结果排序:

SELECT 
    ss.id AS ss_number
FROM sales_sourcing ss
LEFT JOIN (
    -- 子查询:按chat_id分组,获取每个分组的最新write_date
    SELECT 
        chat_id,
        MAX(write_date) AS latest_write_date
    FROM sales_sourcing_chat
    GROUP BY chat_id
) chat ON ss.id = chat.chat_id
WHERE ss.state NOT IN ('draft','cancel')
  AND ss.source_type = 'import'
-- 按最新聊天日期降序排序,NULLS LAST确保无聊天记录的条目排在末尾
ORDER BY chat.latest_write_date DESC NULLS LAST;

逻辑说明

  1. 子查询先对sales_sourcing_chat表按chat_id分组,用MAX(write_date)提取每个聊天组的最新日期;
  2. 将子查询结果与sales_sourcing通过ss.id = chat.chat_id关联,匹配每个业务记录对应的聊天信息;
  3. 保留主查询的筛选条件,最后按latest_write_date降序排序,NULLS LAST可选,用于处理没有对应聊天记录的情况。

如果需要更简洁的写法,也可以用窗口函数实现:

SELECT DISTINCT
    ss.id AS ss_number
FROM sales_sourcing ss
LEFT JOIN sales_sourcing_chat chat ON ss.id = chat.chat_id
WHERE ss.state NOT IN ('draft','cancel')
  AND ss.source_type = 'import'
ORDER BY MAX(chat.write_date) OVER (PARTITION BY ss.id) DESC NULLS LAST;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:05:20