Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 01.01.2016
Сообщений: 9

SQL Выборка последних строк пока сумма столбца будет меньше определенного количества

25.05.2016, 21:59. Показов 3717. Ответов 10

Студворк — интернет-сервис помощи студентам
Приветствую!

Пример таблицы 'table':

|table1----|----table2|----table3---|
|----------|----------|-------------|
|User------| 5000-----|-15-02-2016|
|admin-----| 3500-----|-18-03-2016|
|guest-----| 2000-----|-19-03-2016|
|guest2----| 200------|-23-03-2016|
|guest3----| 2000-----|-24-03-2016|

Нужно выбрать дату первой строки из последних строк где сумма строк по столбцу table2 больше 4000.

То есть, по таблице выше в конце должно выйти 19-03-2016
Должен выйти таблицы

|guest-----| 2000-----|-19-03-2016|
|guest2----| 200------|-23-03-2016|
|guest3----| 2000-----|-24-03-2016|

и значение первой даты оттуда.

Долго искал но не нашел способ. Прошу помочь если кто то знет решение этой проблемы.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.05.2016, 21:59
Ответы с готовыми решениями:

Выборка определенного количества значений столбца
Здравствуйте. Прошу помощи в специалистов. Имеется таблица users, в ней столбцы: id, name, active Таблица заполнена. В столбце...

Случайная выборка ячеек/строк из определенного столбца Excel
Здравствуйте, необходим следующий макрос: При активации что бы генерировалось 20 случайных ячеек из указанного столбца и помещалось в...

Регулярное выражение поиска строк меньше определенного количества слов
Ребята, подскажите регулярку для поиска строк меньше 5 слов в предложении. Текст представляет собой список, строки могут быть со знаками...

10
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
26.05.2016, 07:55
SQL
1
SELECT * FROM TABLE WHERE table2 < 4000 ORDER BY table3
Цитата Сообщение от Dowlpack Посмотреть сообщение
сумма строк по столбцу table2 больше 4000
Здесь пишут "больше 4000", а в таблице ниже показаны все суммы "меньше 4000 (2000 и 200 меньше 4000)".
Так что надо определится что ищем: меньше или больше 4000.
0
0 / 0 / 0
Регистрация: 01.01.2016
Сообщений: 9
26.05.2016, 08:01  [ТС]
Сумма этих 3 строк по столбцу "table2" больше 4000. Значить надо дата первой строки из этих 3 строк
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
26.05.2016, 08:12
Задача по этому условию не имеет определенных решений.
К примеру, сумма первых двух строк тоже больше 4000, сумма второй и третьей строки тоже больше 4000 и т.д.
Нужны уточняющие условия.
0
0 / 0 / 0
Регистрация: 01.01.2016
Сообщений: 9
26.05.2016, 08:29  [ТС]
Это понятно. Вот только задача в том что должно быть именно последние строки а не где попало. Будь то сумма последних 3 или сумма последних 7 строк. Там больше надо делать но я щя остановился именно в этой точке
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
26.05.2016, 08:51
"Последних строк", видимо при сортировке по дате?
Без какой-либо сортировки "последние строки" не определены.
Если сортировка по дате, то выбрать все записи с этой сортировкой и в программе суммировать по условию.
Тогда записи будут идти по порядку дат, что и позволит решить задачу.

Или, если сервер СУБД позволяет (надо бы сказать какая СУБД используется), то
выборку такую лучше делать в хранимой процедуре.
0
0 / 0 / 0
Регистрация: 01.01.2016
Сообщений: 9
26.05.2016, 08:57  [ТС]
Пусть будет по дате последние. Мне главное знать алгоритм
Можно и процедурой. Я тоже так думал. Только пока решение не нашел. СУБД Micrisoft sql server 2014.
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
26.05.2016, 09:08
В ХП или в программе:
В выборке SQL запроса сделать сортировку в обратном порядке (более поздние даты вначале).
Перед циклом по записям в переменную пишем 0.
В цикле, передвигаясь по записям, в переменной суммируем текущее значение столбца table2.
На каждом шаге проверяем значение переменной.
Если оно больше 4000, то прерываем цикл, а значение столбца table3 будет той датой, которая нужна.
(решение это основано на данных из первого сообщения)
0
0 / 0 / 0
Регистрация: 01.01.2016
Сообщений: 9
26.05.2016, 10:24  [ТС]
А в языке SQL не подскажешь?
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
26.05.2016, 10:36
Лучший ответ Сообщение было отмечено Dowlpack как решение

Решение

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
set language russian;
 
declare @t table (table1 varchar(30), table2 int, table3 datetime);
 
insert into @t
values
('User', 5000, '15-02-2016'),
('admin', 3500, '18-03-2016'),
('guest', 2000, '19-03-2016'),
('guest2', 200, '23-03-2016'),
('guest3', 2000, '24-03-2016');
 
with s as
(
 select
  *, sum(table2) over (order by table3 desc) as [sum]
 from
  @t
)
select
 table1, table2, table3
from
 s
where
 [sum] - table2 < 4000
order by
 table3;
1
0 / 0 / 0
Регистрация: 01.01.2016
Сообщений: 9
30.05.2016, 20:58  [ТС]
Спасибо за помощь! Решил проблему немного другим способом. С несколькими вложенными SELECT-ами. В общем, все получилось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2016, 20:58
Помогаю со студенческими работами здесь

Если сумма двух первых строк матрицы А меньше суммы элементов двух последних её строк
Если сумма двух первых строк матрицы А меньше суммы элементов двух последних её строк. Изменить матрицу А, прибавив к элементам каждой...

Нахождение количества строк двумерного массива сумма элементов которых меньше заданного числа
Разработайте программу для нахождения количества строк двумерного массива Mas(nxm), сумма элементов которых меньше заданного числа k. ...

Выбраны два числа по модулю меньше единицы. Какова вероятность того что сумма их квадратов будет меньше 1
случайным образом выбраны два числа x и y, которые по модулю меньше единицы. Какова вероятность того что сумма их квадратов будет меньше 1

Выборка последних ненулевых значений из столбца по двум условиям
пытаюсь написать формулу для :выборка последних не нулевых значений из столбца по двум условиям, но никак не получается( ...

Выборка из текста определенного количества цифр
Здравствуйте, ВСЕ! Имеется текстовый файл, в котором содержатся слова и наборы цифр. Задача состоит в том, что необходимо из файла...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru