给出一个包含以下数据的简单表:
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()
和分区语法,但我似乎无法确定它。
答案 0 :(得分: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
);
这会获得W
和L
的最新ID,这是前两者中的较早者。所以LIMIT 1
得到了相反结果的最后一个条目。高于id
的行形成最新的条纹。瞧。