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

PostgreSQL如何通过单条查询获取指定名称列表对应的最新批次匹配行

实现方案说明

单条查询实现方法

完全可以用单条SQL实现需求,核心思路是通过子查询先拿到全表最新的批次时间戳,再用该时间戳和名称列表过滤即可,示例SQL如下:

SELECT ts, name, val
FROM 你的表名 -- 替换为实际表名
WHERE 
  name IN ('joe', 'eric', 'amelia')
  AND ts = (SELECT MAX(ts) FROM 你的表名);

拿你提供的示例数据验证:子查询会得到最新时间2020-01-02,外层过滤后会匹配到该时间下名称在列表内的joe和amelia两条数据,和你预期的输出完全一致。

名称列表传入方法

根据使用场景不同,有两种常见的传入方式:

  • 手动执行SQL的场景:直接写在IN子句中即可,多个名称用逗号分隔,字符串类型的名称需要用单引号包裹,和上面示例的写法一致。
  • 编程语言调用SQL的场景:不要直接拼接字符串构造SQL(会有SQL注入风险),推荐使用参数化查询传入列表,不同数据库/编程语言的写法略有区别,举两个常见示例:
    • Python操作PostgreSQL(使用psycopg2库):
      target_names = ['joe', 'eric', 'amelia']
      cursor.execute(
          "SELECT ts, name, val FROM 你的表名 WHERE name = ANY(%s) AND ts = (SELECT MAX(ts) FROM 你的表名)",
          (target_names,)
      )
      
    • Python操作MySQL(使用pymysql库):
      target_names = ['joe', 'eric', 'amelia']
      # 构造对应数量的占位符
      placeholders = ', '.join(['%s'] * len(target_names))
      sql = f"SELECT ts, name, val FROM 你的表名 WHERE name IN ({placeholders}) AND ts = (SELECT MAX(ts) FROM 你的表名)"
      cursor.execute(sql, target_names)
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 06:06:04