powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка верхних строк с определенной суммой столбца
10 сообщений из 10, страница 1 из 1
Выборка верхних строк с определенной суммой столбца
    #39384477
Lynxovat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица
Id Quantity1 502 1003 504 205 606 207 100
где Id 1 - самая новая запись, Id 7 - старая.
Нужно выбрать верхние строки с общей суммой столбца "Quantity" не менее 250, то есть ожидаемый результат:
Id Quantity1 502 1003 504 205 60
Сам пока дошел только до такого:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT *
  FROM (
    SELECT SUM(Quantity) OVER(ORDER BY Id ASC) AS S, a.*
    FROM my_table a
  )
WHERE S < 250


В результате получаю меньше, чем нужно, на 1 строку:
Id Quantity1 502 1003 504 20
Заранее спасибо!
...
Рейтинг: 0 / 0
Выборка верхних строк с определенной суммой столбца
    #39384485
Bad The John Boy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
(order by Id ASC rows between unbounded preceding and 1 preceding) 
...
Рейтинг: 0 / 0
Выборка верхних строк с определенной суммой столбца
    #39384567
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bad The John Boy
Код: plsql
1.
(order by Id ASC rows between unbounded preceding and 1 preceding) 



Ну и про NULL не забываем.

SY.
...
Рейтинг: 0 / 0
Выборка верхних строк с определенной суммой столбца
    #39385529
Lynxovat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bad The John Boy,

Спасибо, то, что нужно.

Но исходная задача немного изменилась. Допустим, в исходном сферическом примере Id могут повторяться:
Id Quantity1 501 1002 503 203 603 204 1004 105 50
В конечной выборке нужны все строки с тем Id, когда сумма Quantity становится 250+, то есть:
Id Quantity1 501 1002 503 203 603 20
Логично, что нужно просто в
Код: plsql
1.
(order by Id ASC rows between unbounded preceding and 1 preceding) 


использовать range вместо rows, но с range не допускается использовать выражения типа "and 1 preceding". Как быть?
...
Рейтинг: 0 / 0
Выборка верхних строк с определенной суммой столбца
    #39385565
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lynxovatс range не допускается использовать выражения типа "and 1 preceding"субд не попутал?
...
Рейтинг: 0 / 0
Выборка верхних строк с определенной суммой столбца
    #39385589
Lynxovat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Lynxovatс range не допускается использовать выражения типа "and 1 preceding"субд не попутал?
Да вроде нет:
Oracle Database 11g Release 11.2.0.3.0 - 64bit Production
Так то, в принципе он не ругается, но и не работает, как ожидается - не добавляет весь range, хотя с rows всё прокатывает.
...
Рейтинг: 0 / 0
Выборка верхних строк с определенной суммой столбца
    #39385611
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LynxovatТак то, в принципе он не ругается, но и не работает, как ожидается - не добавляет весь range, хотя с rows всё прокатывает.

Все он показывает:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SQL> with t as (
  2             select  id,
  3                     quantity,
  4                     nvl(sum(quantity) over(order by id range between unbounded preceding and 1 preceding),0) q
  5               from  tbl
  6            )
  7  select  id,
  8          quantity
  9    from  t
 10    where q < 250
 11  /

        ID   QUANTITY
---------- ----------
         1         50
         1        100
         2         50
         3         20
         3         60
         3         20

6 rows selected.

SQL>



SY.
...
Рейтинг: 0 / 0
Выборка верхних строк с определенной суммой столбца
    #39385623
Lynxovat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

Спасибо! Внимательно посмотрел ваш пример и добавил
Код: sql
1.
nvl(...),0)


Всё заработало. Видимо, это и имелось ввиду под "Ну и про NULL не забываем."
...
Рейтинг: 0 / 0
Выборка верхних строк с определенной суммой столбца
    #39385655
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LynxovatВсё заработало. Видимо, это и имелось ввиду под "Ну и про NULL не забываем."

Т.е. ты хочешь сказать что с ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING бeз NVL pаботало ?
Помедитируй что вернет пeрвый ROW/RANGE при 1 PRECEDING.

SY.
...
Рейтинг: 0 / 0
Выборка верхних строк с определенной суммой столбца
    #39385665
Lynxovat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYLynxovatВсё заработало. Видимо, это и имелось ввиду под "Ну и про NULL не забываем."

Т.е. ты хочешь сказать что с ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING бeз NVL pаботало ?
Помедитируй что вернет пeрвый ROW/RANGE при 1 PRECEDING.

SY.
Хм, без nvl теряет первый row/range, всё остальное исправно выводит. Да, сложно назвать это "работало".
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка верхних строк с определенной суммой столбца
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]