【问题标题】:OFFSET and LIMIT are not working MAX in POSTGRESOFFSET 和 LIMIT 在 POSTGRES 中不起作用
【发布时间】:2021-08-28 11:17:10
【问题描述】:

PGADMIN 中的 Follow 查询什么都不给我

SELECT MAX(time) AS MaxID 
FROM table_name 
where column_name like 'valu_name' 
OFFSET 1000 Limit 1000

好像我在哪里运行以下查询,它给我输出

SELECT MAX(time) AS MaxID 
FROM table_name 
where column_name like 'valu_name'

但是为什么呢?为什么MAX 函数不能与OFFSETLIMIT 一起使用?

正确的做法是什么?

用例是获取 2000 到 3000 之间的行的最大时间戳,这就是我使用 OFFSET 和 LIMIT 的原因,From to To 行可能会改变!!

【问题讨论】:

  • 那是因为该查询只返回一个值,所以从 1000 到 2000 的行没有意义(它们不存在)
  • SELECT MAX(time) AS MaxID FROM table_name 只返回一行一列,所以显然offset 1000 没有返回任何内容
  • 用例是获取 2000 到 3000 之间的行的最大时间戳,这就是我使用 OFFSET 和 LIMIT 的原因,从到行可能会改变!!
  • @a_horse_with_no_name 你能给我一个更好的主意吗?
  • Logical query processing - 最后应用 OFFSET-FETCH。其次,没有明确的ORDER BY 整个查询是underetministic(表是无序集)

标签: sql postgresql limit sql-max


【解决方案1】:

OFFSETLIMIT 在您获得 MAX(time) 的结果后应用,只有 1 行。

如果你想获得最大的time 1000 行,因为没有ORDER BY 子句,所以从你的表中任意返回,你应该使用一个返回这些行然后聚合的子查询:

SELECT MAX(time) AS MaxID 
FROM (
  SELECT time
  FROM table_name 
  WHERE column_name like 'valu_name' 
  OFFSET 1000 Limit 1000
) t 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2013-04-13
    • 1970-01-01
    • 2011-07-27
    • 2020-08-19
    • 1970-01-01
    相关资源
    最近更新 更多