【问题标题】:PostgreSQL, SELECT from max idPostgreSQL,从最大 ID 中选择
【发布时间】:2013-05-31 22:18:16
【问题描述】:

通过在 PG 9.1 上使用 libpq,我正在尝试编写查询以从具有最高索引“my_id”的行中获取值:

SELECT my_id, col2, col3 
FROM mytable 
WHERE my_id = MAX(my_id)

这给了我错误:

错误:WHERE 子句中不允许聚合...

如何正确编写这样的查询?

【问题讨论】:

    标签: sql postgresql greatest-n-per-group


    【解决方案1】:
    SELECT my_id, col2, col3 FROM mytable WHERE my_id = (select MAX(my_id) FROM mytab)
    

    或使用

    SELECT my_id, col2, col3 FROM mytable ORDER BY my_id DESC LIMIT 1
    

    【讨论】:

      【解决方案2】:

      如果您的目标是获取具有最高 my_id 值的行,那么以下查询应该达到相同的目标。

      SELECT my_id, col2, col3 
      FROM mytable 
      ORDER BY my_id DESC 
      LIMIT 1
      

      【讨论】:

      • 就是这样,谢谢。我只能接受一个(最快的),但所有答案都有帮助,抱歉。
      • 回想起来似乎很明显的答案之一。
      【解决方案3】:

      只需通过my_id 订购,并仅使用limit 1 获取第一条记录

      SELECT my_id, col2, col3
      FROM mytable 
      order by my_id desc
      limit 1
      

      另一种但性能较差的方法是

      SELECT my_id, col2, col3
      FROM mytable 
      where my_id = (select max(my_id) from mytable)
      

      【讨论】:

        【解决方案4】:

        子查询可以帮到你

        SELECT my_id, col2, col3 FROM mytable WHERE my_id = (select MAX(my_id) FROM mytable)
        

        【讨论】:

          【解决方案5】:

          当您在 my_id 上有索引时,带有子查询的索引应该更快。当您没有索引时,请使用“order by”。 (obv. 取决于相关的数据库大小)

          【讨论】:

          • 可能反过来。 Postgres 优化了索引适用的LIMIT 1 查询。
          猜你喜欢
          • 1970-01-01
          • 2011-02-22
          • 1970-01-01
          • 1970-01-01
          • 2012-03-16
          • 2010-10-28
          • 2023-02-06
          • 1970-01-01
          • 2013-05-05
          相关资源
          最近更新 更多