给出一个包含以下数据的简单表格:
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()
和分区语法,但我似乎无法确定它。
假设(正如你没有告诉的那样)
- 恰好有两个不同的值
result
: (W, L)
.
-
id
是连续的,因为最新的条目具有最高的id
.
这可以完成这项工作:
SELECT *
FROM tbl
WHERE id > (
SELECT max(id)
FROM tbl
GROUP BY result
ORDER BY max(id)
LIMIT 1
);
这会获取最新的 idW
and L
,两者中较早的一个。所以一个LIMIT 1
获取相反结果的最后一个条目。带有一个的行id
高于最新的连续走势。瞧。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)