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

如何在PostgreSQL中添加首单对应部门名称列

PostgreSQL 查询:添加用户在对应公司下首次销售的部门名称

需求是为每条销售记录添加first_division_name列,存储该用户在对应公司下首次销售对应的部门名称——即同一user_id+company组合中,最早sale_date对应的division_name,需填充到该组合的所有记录中。

方法一:使用窗口函数(最简洁)

利用FIRST_VALUE窗口函数直接计算每个分组的首次部门名称,无需额外关联:

SELECT 
    user_id,
    company,
    division_name,
    sale,
    sale_date,
    FIRST_VALUE(division_name) OVER (
        PARTITION BY user_id, company 
        ORDER BY sale_date ASC
        ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
    ) AS first_division_name
FROM your_table_name;
  • PARTITION BY user_id, company:限定仅在同一用户+公司的范围内计算首次部门
  • ORDER BY sale_date ASC:按销售日期升序排列,确保最早的记录排在分组首位
  • ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING:让窗口覆盖分组内所有行,确保每条记录都能拿到分组的首个部门名称(默认窗口仅包含从开头到当前行的记录,需手动扩展范围)

方法二:先聚合再关联(兼容性更强)

如果需要兼容旧版PostgreSQL或更直观的逻辑,可以先找出每个用户+公司的最早销售日期,再关联获取对应的部门名称:

WITH first_sales AS (
    -- 第一步:找出每个用户+公司的最早销售日期
    SELECT 
        user_id,
        company,
        MIN(sale_date) AS first_sale_date
    FROM your_table_name
    GROUP BY user_id, company
),
first_division AS (
    -- 第二步:根据最早日期获取对应的部门名称
    SELECT 
        fs.user_id,
        fs.company,
        t.division_name AS first_division_name
    FROM first_sales fs
    JOIN your_table_name t 
        ON fs.user_id = t.user_id 
        AND fs.company = t.company 
        AND fs.first_sale_date = t.sale_date
)
-- 第三步:关联原表,为每条记录添加上首次部门名称
SELECT 
    t.*,
    fd.first_division_name
FROM your_table_name t
JOIN first_division fd 
    ON t.user_id = fd.user_id 
    AND t.company = fd.company;

示例输出

执行上述查询后,结果将与示例表格一致:

user_idcompanydivision_namesalesale_datefirst_division_name
1redname 110001-01-2022name 1
1bluename 215003-02-2022name 1
2bluename 310010-05-2023name 3
1redname 48010-05-2023name 1
2whitename 110012-06-2023name 3
3redname 112003-02-2022name 1
3redname 16003-03-2022name 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:02:01