Я думаю, я бы сделал это, чтобы получить базовые данные:
select uid, date, sum(credit) as credit, sum(debit) as debit
from ((select uid, dat amt as credit, 0 as debit
from credittable1
) union all
(select uid, dat amt as credit, 0 as debit
from credittable2
) union all
(select uid, dat amt as credit, 0 as debit
from credittable3
) union all
(select uid, dat, 0, - amt
from debittable
)
) ad
group by uid, dat
order by uid, date;
Затем вы можете использовать переменные для получения баланса:
select uid, date,
(@b := if(@u = uid, @u + credit + debit,
if(@u := uid, credit + debit, credit + debit)
)
) as balance
from (select uid, date, sum(credit) as credit, sum(debit) as debit
from ((select uid, dat amt as credit, 0 as debit
from credittable1
) union all
(select uid, dat amt as credit, 0 as debit
from credittable2
) union all
(select uid, dat amt as credit, 0 as debit
from credittable3
) union all
(select uid, dat, 0, - amt
from debittable
)
) ad
group by uid, date
order by uid, date
) ud cross join
(select @u := -1, @b := 0) balance;
Или в MySQL 8+ может использовать накопленную сумму:
sum(debit + credit) over (partition by uid order by date)
Я не забываю читать (давным-давно) краткое описание алгоритма, чтобы сделать так:
для общей формы строки, Вы разделяете сегмент в два в случайной точке и перемещаете эту точку немного далеко от, он - положение (изменение в зависимости от расстояния точки к оконечности). Повторитесь рекурсивно/случайным образом. Таким образом, Вы строки не "прекрасны" (прямая линия)
для данного сегмента, по которому можно "промахнуться" немного путем расширения одной оконечности или другого (или оба). Таким образом, у Вас нет идеальных соединений . Если я помню хорошо, лучшее было к, расширяет исходные оконечности, но можно сделать это для подсегмента, если Вы хотите явно разделить их.
проводят линии с шаблоном/штампом
было также (уже упомянуто) возможность оттянутому с другим запуском и конечной непрозрачностью (для имитации тенденции выпустить перо в конце рисования)
, можно использовать другой размер для штампа в начале и конце строки (также для имитации тенденции выпустить перо в конце рисования). Для того же эффекта можно также разграничить дважды с маленьким изменением для одной из оконечности (быть осторожным с альфой в этом случае, как линия будет проведена дважды)
Наконец, для данной строки, можно несколько раз делать предыдущие модификации (т.е. разграничивать дважды с различными изменениями): человек склонен повторять строку, если они делают некоторые ошибки.
Отношения
При выдувании изображения, Вы видите повторяющийся шаблон штампа.. существует, вероятно, маленький выбор, который это использует, когда это перемещается от до b - мог бы даже повернуть их..
колеблющаяся из строки не может быть всем этим трудным сделать. Разделитесь на набор случайных сегментов, выберите положения немного далеко от прямого маршрута и потяните шлицы.
Вот бумага , который использует много математики для моделирования смещения воска на бумаге с помощью модели трения. Но я думаю, что Ваш лучший выбор состоит в том, чтобы просто использовать повторяющийся шаблон, как другой читатель упомянул, и варьируйтесь непрозрачность согласно давлению.
Для несовершенных частей рисования строки, я имею запись в блоге описание, как сделать это с помощью кривых Безье.
Можно основывать темноту на скорости. Это просто имеет размеры, расстояние переместилось курсором между этим кадром, и последний кадр (помните Теорему Пифагора), и затем когда Вы идете, чтобы привлечь тот линейный сегмент на экране, скорректировать альфу (непрозрачность) согласно расстоянию, Вы имели размеры.
Я считаю, что проще всего было бы просто использовать текстуру со случайным затемнением (возможно, с некоторыми градиентами) повсюду и задавать размер случайным образом.
Есть бумага под названием Mimicking Hand Drawn Pencil Lines , в которой немного рассказывается о том, что вам нужно. Хотя в нем нет подробного представления об алгоритме, авторы описывают основные шаги, которые они использовали.
В этот документ включены высокоуровневые описания того, как они генерировали линии, а также как они генерировали текстуры для линий, и они получают результаты, подобные тем, которые вы хотите.