sql - 根据字段值限制查询结果

标签 sql postgresql

我有一个表帐户,其结构如下:

| agg_type  | agg_id  | sequence | payload | is_snapshot | timestamp |
| "account" | "agg_1" | 1        | "..."   | false       | ...       |
| "account" | "agg_1" | 2        | "..."   | true        | ...       |
| "account" | "agg_1" | 3        | "..."   | false       | ...       |
| "account" | "agg_1" | 4        | "..."   | false       | ...       |
| "account" | "agg_1" | 5        | "..."   | false       | ...       |
| "account" | "agg_1" | 6        | "..."   | false       | ...       |
| "account" | "agg_1" | 7        | "..."   | true        | ...       |
| "account" | "agg_1" | 8        | "..."   | false       | ...       |

我需要编写一个查询,该查询将从特定聚合的最新快照开始检索该表中的所有行。例如,在此表中,查询将返回最后两行(序列 7 和 8)。

我认为查询会是这样的

SELECT * FROM account 
WHERE
  agg_type='account'
  AND agg_id='agg_1'
ORDER BY sequence ASC
LIMIT (???);

这是我不太确定如何实现的 (???) 部分。

观察:

  • 我正在使用 Postgres,如果它有帮助的话。
  • (agg_type、agg_id、sequence)组合是主键。

最佳答案

简单地说,我们可以检索序列大于或等于快照的最高序列 ID 的所有帐户

SELECT * FROM account a
WHERE
  a.agg_type='account'
  AND a.agg_id='agg_1' 
  AND a.sequence >= 
    (SELECT MAX(sequence) FROM account b WHERE a.agg_type = b.agg_type AND a.agg_id = b. agg_id AND b.is_snapshot = true)

如果您想完成所有这些操作,将其写为联接可能会更清楚:

SELECT a.* 
FROM 
  account a
  INNER JOIN
  (
    SELECT 
      agg_type, 
      agg_id, 
      MAX(sequence) as maxseq 
    FROM account b 
    GROUP BY agg_type, add_id
  ) maxes
  ON 
    a.agg_type = maxes.agg_type and
    maxes.agg_id = a.max_id and
    a.sequence >= maxes.maxseq

这并不是说我们不能用任何一种形式完成任何任务(并且 postgres 内部可能会以相同的方式执行它们),但我一直认为使用连接作为“这里有 10000 行,我只想要满足这 1000 行规定的标准的 2000 行”最清楚地考虑的是连接在一起的数据 block

关于sql - 根据字段值限制查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63380725/

相关文章:

PostgreSQL 错误 : Column "Income" specified more than once

python - PostgreSQL pgdb 驱动程序引发 "can' t 回滚“异常

sql - PostgreSQL中的Gin索引以及gin_trgm_ops和to_tsvector的区别

sql - 选择从上一行发生更改的记录

mysql 按索引选择返回错误选择

MySql多类别排名系统

sql - 在显示唯一行的单个表中进行查询

sql - 查找特定组中最常见的值

postgresql - Postgres 嵌套循环顺序

sql - PostgreSQL 9.1 主键自增