1
26
如果用一种编程语言运行两个查询,有很多方法可以做到这一点,但在一个SQL查询中有一种方法可以做到:
|
2
7
这里有另一种方法来处理分析函数lead和lag。如果我们能在WHERE子句中使用解析函数就好了。因此,您需要使用子查询或CTE。
|
3
2
对于类似的查询,我使用不带CTE的分析函数。比如:
这样的查询对我来说比使用join的CTE更快(Scott Bailey的回答)。但当然不那么优雅 |
4
1
您可以使用row\u number()来实现这一点(从8.4开始提供)。这可能不是正确的语法(不熟悉postgresql),但希望能说明这个想法:
这将生成具有序列号的第一列。您可以使用它来标识单行及其上方和下方的行。 |
5
0
如果您想以“纯关系”的方式进行,可以编写一个对行进行排序和编号的查询。比如:
然后将其用作公共表表达式。写一个select,将它过滤到您感兴趣的行,然后使用一个条件将它连接回自身,即表的右侧副本的索引不大于k或小于左侧行的索引。投射到右边的行上。比如:
再简单不过了!
|
tggtsed · PostgreSQL从平均值中排除值 1 年前 |
Dawid · 为什么我不能在子查询中使用表别名? 2 年前 |
CraZyCoDer · 在PostgreSQL中锁定潜在事务 2 年前 |
ranebec · 计数时如何返回0而不是null? 2 年前 |
Flo · 分组依据中的SQL大小写 2 年前 |