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

PostgreSQL如何查询各账号最新状态并计算用户首次加入时间

解决方案

场景1:表中已存在first_join_time字段

优先推荐用PostgreSQL专属的DISTINCT ON语法实现,写法简洁且执行效率更高:

SELECT DISTINCT ON (account)
  first_join_time,
  account,
  status
FROM 你的表名
ORDER BY account, time DESC;

如果需要兼容标准SQL语法,也可以用窗口函数实现:

WITH ranked_data AS (
  SELECT 
    first_join_time,
    account,
    status,
    ROW_NUMBER() OVER (PARTITION BY account ORDER BY time DESC) AS rn
  FROM 你的表名
)
SELECT first_join_time, account, status
FROM ranked_data
WHERE rn = 1;
  • 逻辑说明:按account分组后,每组内按状态更新时间time倒序排序,取排名为1的记录就是该账号最新的状态数据。

场景2:表中不存在first_join_time字段

用聚合窗口函数MIN()计算每个账号的首次加入时间,再结合上述取最新记录的逻辑即可:

SELECT DISTINCT ON (account)
  MIN(time) OVER (PARTITION BY account) AS first_join_time,
  account,
  status
FROM 你的表名
ORDER BY account, time DESC;

标准SQL版本:

WITH calculated_data AS (
  SELECT 
    MIN(time) OVER (PARTITION BY account) AS first_join_time,
    account,
    status,
    ROW_NUMBER() OVER (PARTITION BY account ORDER BY time DESC) AS rn
  FROM 你的表名
)
SELECT first_join_time, account, status
FROM calculated_data
WHERE rn = 1;
  • 逻辑说明:MIN(time) OVER (PARTITION BY account)会为同一账号的所有行填充该账号最小的time值,也就是用户首次加入时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:54:03