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

(あなたが言わないように)それを仮定すると

  • :には、正確に2つの異なる値がありresultます(W, L)
  • id最新のエントリが最も高いという意味でシーケンシャルidです。

これは仕事をします:

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

Wこれにより、との最新のIDが取得され、L最初の2つのうち早い方が取得されます。したがって、aLIMIT 1は反対の結果の最後のエントリを取得します。それより高い行がid最新のストリークを形成します。Voilá。

于 2012-04-04T03:39:34.057 に答える