Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами / 15 сообщений из 15, страница 1 из 1
11.02.2017, 21:12
    #39402782
bhr
bhr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
оракла под рукой нету. Но постараюсь понятно изложить проблему.
Что-то ум за разум зашел. не могу придумать красивое решение. Что-то туплю.
Итак. есть две таблицы. в каждой есть поле сумма. есть набор полей, по которым эти таблицы можно связать отношением много ко многим. Для упрощения будем считать, что условий связки нету, просто декартово произведение двух таблиц.
Нужно получить результирующую таблицу - декартово произведение, с полем сумма, чтоб выполнялись следующие условия. к каждой строке первой таблицы можно привязать строки второй на сумму не более, чем указано в ее поле сумма. то есть эта строчка рамножится в результирующей таблице на сумму не бОльшую, чем в ней указано. Аналогично со второй таблицей и ее суммами.
суммы можно дробить.
Если по простому представить алгоритм, всякий раз когда инсертим строчку связки в результирующую таблицу - уменьшаем остаток суммы в исходных строчках. забрать из строчки больше чем в ней осталось - нельзя.
можно сказать так - раздать Эн мужикам зарплату из М мешков с деньгами.
заранее спасибо.
...
Рейтинг: 0 / 0
11.02.2017, 21:58
    #39402811
Скучающий
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
На livesql.oracle.com дают всем желающим запускать запросы и создавать таблички. Требуется аккаунт, но это бесплатно.

Сама описанная задача требует динамического программирования и, думаю, в SQL решения не имеет
...
Рейтинг: 0 / 0
11.02.2017, 23:10
    #39402838
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
bhrможно сказать так - раздать Эн мужикам зарплату из М мешков с деньгами.Эта задача решается элементарно: кассирша Маня берет очередной мешок и выдаёт очередному мужику не больше, чем ему положено по ведомости. Когда мешок заканчивается берёт из следующего.
В результате из первого мешка получают Юра, Гоша и Жора, а Жора, в свою очередь получает из первого и второго мешков. - Все довольные мужики не донесли зарплату до жён и детей.
...
Рейтинг: 0 / 0
12.02.2017, 00:52
    #39402852
bhr
bhr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
спасибо большое.
вот бы все то же самое, но sql запросом
...
Рейтинг: 0 / 0
12.02.2017, 01:25
    #39402856
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
bhrспасибо большое.
вот бы все то же самое, но sql запросомС какого перепугу ты решил, что кто-то будет тратить свое время, чтоб сделать эту рутину для тебя овоща?
Ты хотя бы продемонстрировал свои потуги и изобразил решение на PL/SQL.
Если и на это не способен, учитывая что алгоритм давно реализован и легко гуглится, то программирование не для тебя.
Такое отродье как ты - это пятно на айти сообщество.
Пшёл вон!
...
Рейтинг: 0 / 0
12.02.2017, 02:08
    #39402861
bhr
bhr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
Препо-ДавательТакое отродье как ты - это пятно на айти сообщество.
Пшёл вон!
это все ужасно. Дяденька. проходи мимо.
...
Рейтинг: 0 / 0
12.02.2017, 07:21
    #39402883
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
bhrвот бы все то же самое, но sql запросомТы глаза-то разуй.
...
Рейтинг: 0 / 0
12.02.2017, 09:03
    #39402890
bhr
bhr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
Elicbhrвот бы все то же самое, но sql запросомТы глаза-то разуй.
пока вижу только алгоритм с использованием цикла. как дяденька выше писал - pl-sql
его изначально видел. sql запросом было сделано при связи один ко многим. для много ко многим - затык.
но за совет - спасибо. разую обязательно.
...
Рейтинг: 0 / 0
12.02.2017, 09:06
    #39402891
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
bhrпока вижу ... разую обязательно.Не затягивай.
...
Рейтинг: 0 / 0
12.02.2017, 09:40
    #39402897
bhr
bhr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
Elicbhrпока вижу ... разую обязательно.Не затягивай.
сорри. не заметил вложение.
...
Рейтинг: 0 / 0
12.02.2017, 10:50
    #39402902
bhr
bhr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
спасибо. основную идею понял.
решение ForStats показалось более читаемым.
Беру на вооружение.
...
Рейтинг: 0 / 0
12.02.2017, 12:23
    #39402915
bhr
bhr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
выложу сюда его решение для тех,кому интересно. и самому, чтоб не искать в дальнейшем
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
WITH
/* Подытоги для list_value */
parameter
AS (SELECT sq.*,
           Lag(sq.p_subtotal_value, 1, 0)
             over (
               ORDER BY sq.serial_par ) p_previous_subtotal_value
    FROM   (SELECT lv.serial_par,
                   lv.parameter_value,
                   SUM (lv.parameter_value)
                     over (
                       ORDER BY lv.serial_par ROWS unbounded preceding )
                   p_subtotal_value
            FROM   list_values lv) sq
    ORDER  BY sq.serial_par),
     /* Подытоги для list_total */
     total
     AS (SELECT sq.*,
                Lag(sq.t_subtotal_value, 1, 0)
                  over (
                    ORDER BY sq.serial_tot ) t_previous_subtotal_value
         FROM   (SELECT lt.serial_tot,
                        lt.total_value,
                        SUM (lt.total_value)
                          over (
                            ORDER BY lt.serial_tot ROWS unbounded preceding )
                        t_subtotal_value
                 FROM   list_total lt) sq
         ORDER  BY sq.serial_tot)
/* Основной запрос */
SELECT sq.*,
       SUM(sq.real_value)
         over (
           PARTITION BY sq.serial_tot
           ORDER BY sq.serial_par ROWS unbounded preceding )
       "Нарастающая сумма"
FROM   (SELECT t.serial_tot,
               t.total_value,
               p.serial_par,
               p.parameter_value,
               Least(t.t_subtotal_value, p.p_subtotal_value) - Lag(
               Least(t.t_subtotal_value, p.p_subtotal_value), 1, 0)
               over (
                 ORDER BY t.serial_tot, p.serial_par ) real_value
        FROM   parameter p,
               total t
        WHERE  p.p_previous_subtotal_value < t.t_subtotal_value
               AND p.p_subtotal_value > t.t_previous_subtotal_value) sq
ORDER  BY sq.serial_tot,
          sq.serial_par
/
...
Рейтинг: 0 / 0
12.02.2017, 15:13
    #39402962
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
bhrвыложу сюда его решение для тех,кому интересноНеформатированный поток сознания интересен только узконаправленным специалистам, не бывающих на этом форуме.
bhrи самому, чтоб не искать в дальнейшемКупи блокнотик или заведи блог.
...
Рейтинг: 0 / 0
12.02.2017, 15:29
    #39402964
bhr
bhr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
убедили. Хрен знает, откуда такое форматирование взялось. когда выкладывал, выглядело красиво.
проще было ссылку выложить на обсуждение проблемы.
В любом случае, спасибо. помогли.
...
Рейтинг: 0 / 0
13.02.2017, 10:57
    #39403274
д0kХ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / связь по суммам. раздать Эн мужикам зарплату из М мешков с деньгами / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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