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

如何在Presto中按用户ID获取前两大值?寻求优雅实现方案

需求:获取每个用户最新的两条病症记录

我之前尝试的方法不够优雅,发现nth_value(x, offset)窗口函数似乎正好适用这类场景,但能找到的示例只有Starburst提供的这个:

SELECT name,
 nth_value(name, 2) OVER (
 ORDER BY name
 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
 ) AS value
FROM region;

这个示例里没有我需要的按用户ID分组的部分。

我的数据集如下:

用户ID日期病症
101/01/2000中风
101/02/2000感冒
202/02/2000中风
202/03/2000哮喘
202/05/2000心脏病发作
301/08/2000哮喘
301/18/2000心脏病发作
301/10/2000中风
405/12/2000哮喘
405/13/2000感冒

期望输出每个用户ID对应的两条最新日期记录:

用户ID日期病症
101/02/2000感冒
101/01/2000中风
202/05/2000心脏病发作
202/03/2000哮喘
301/18/2000心脏病发作
301/10/2000中风
405/13/2000感冒
405/12/2000哮喘

我知道可以用rank()函数来实现部分逻辑:

SELECT 
  id,
  rank() OVER (
      PARTITION BY id
      ORDER BY date DESC) 
      AS rnk
FROM condition

但我觉得这个方案不够优雅,想找到更合适的实现方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:45:34