选择具有最大值的唯一列

时间:2018-03-28 09:43:52

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

对不起有点模糊的标题。不知道如何更好地描述它。

我有这样的表

CREATE TABLE foo (
  id      INT          NOT NULL,
  version INT          NOT NULL,
  data    VARCHAR(200) NULL,
  PRIMARY KEY (id, version)
);

使用这样的数据:

INSERT INTO foo
VALUES
  (1, 1, '1.1'),
  (2, 1, '2.1'),
  (3, 1, '3.1'),
  (1, 2, '1.2'),
  (2, 2, '2.2'),
  (4, 1, '4.1'),
  (1, 3, '1.3'),
  (4, 2, '4.2');

我需要获取所有行(或具有最高id值的 N 行。这实际上会更频繁地使用最新可用version和唯一{{1} }。我现在有两个问题似乎正在起作用。但是,如果有更好的方法,我在SQL中没有足够的信心来决定哪个更好。此外,我不认为我需要任何额外的索引,但同样,欢迎提出建议。 DB是PostgreSQL(9.5),我期望千分之一行(但在不久的将来它可能不会是10000)。

查询1:

id

查询2:

test_db=# SELECT DISTINCT ON (id) id, version, data FROM foo ORDER BY id DESC, version DESC;
 id | version | data 
----+---------+------
  4 |       2 | 4.2
  3 |       1 | 3.1
  2 |       2 | 2.2
  1 |       3 | 1.3
(4 rows)


test_db=# SELECT DISTINCT ON (id) id, version, data FROM foo ORDER BY id DESC, version DESC limit 2;
 id | version | data 
----+---------+------
  4 |       2 | 4.2
  3 |       1 | 3.1
(2 rows)

0 个答案:

没有答案