4

给定一个包含以下数据的简单表:

 id | result |   played   
----+--------+------------
  7 | L      | 2012-01-07
  6 | L      | 2012-01-06
  5 | L      | 2012-01-05
  4 | W      | 2012-01-04
  3 | W      | 2012-01-03
  2 | L      | 2012-01-02
  1 | W      | 2012-01-01

我将如何编写查询以返回使用 PostgreSQL 的最新连续输赢行?在这种情况下,我正在寻找以下结果:

 id | result |   played   
----+--------+------------
  7 | L      | 2012-01-07
  6 | L      | 2012-01-06
  5 | L      | 2012-01-05

我猜答案是使用lag()和分区语法,但我似乎无法确定。

4

1 回答 1

3

假设(正如你没有告诉的那样)

  • result:有两个不同的值(W, L)
  • id在最新条目具有最高的意义上是连续的id

这将完成这项工作:

SELECT *
FROM   tbl
WHERE  id > (
    SELECT max(id)
    FROM   tbl
    GROUP  BY result
    ORDER  BY max(id)
    LIMIT  1
    );

这将获取Wand的最新 id L,两者中较早的一个。所以 aLIMIT 1得到相反结果的最后一个条目。id高于该值的行形成最新的连胜记录。瞧。

于 2012-04-04T03:39:34.057 回答