Рассмотрим это утверждение в Informix :
SELECT
a,
b,
sum(a) over (order by b) "no frame",
sum(a) over (order by b range between unbounded preceding and current row) "range",
sum(a) over (order by b rows between unbounded preceding and current row) "rows"
FROM TABLE(SET{row(1, 1), row(2, 1), row(3, 2), row(4, 2)}) AS t(a, b);
Удивительно, но он дает одинаковый результат для range
и rows
:
a |b |no frame |range |rows |
--|--|---------|------|-----|
1 |1 |3 |1 |1 |
2 |1 |3 |3 |3 |
3 |2 |10 |6 |6 |
4 |2 |10 |10 |10 |
Это работает совершенно иначе, чем в любой СУБД, к которой я привык, включая PostgreSQL :
SELECT
a,
b,
sum(a) over (order by b) "no frame",
sum(a) over (order by b range between unbounded preceding and current row) "range",
sum(a) over (order by b rows between unbounded preceding and current row) "rows"
FROM (values(1, 1), (2, 1), (3, 2), (4, 2)) AS t(a, b);
... который производит ожидаемый
a |b |no frame |range |rows |
--|--|---------|------|-----|
1 |1 |3 |3 |1 |
2 |1 |3 |3 |3 |
3 |2 |10 |10 |6 |
4 |2 |10 |10 |10 |
Есть ли тонкая разница между Informix и стандартным SQL, которую я пропускаю, или это ошибка? Я использую официальный образ докера , который соответствует Informix 12.10 на данный момент.