|
|
|
Инициализация пользовательской переменной
|
|||
|---|---|---|---|
|
#18+
Есть составной запрос, на основе которого планируется создание View: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Инвестор с номером 0 -- управляющий. Эти деньги должны распределяться между остальными пропорционально их текущим суммам. В этих суммах должен учитываться доход от предыдущих действий управляющего. Чтобы такие суммы посчитать введена переменная @S. При первом выполнении запроса все значения правильные: +------------+--------+----------+--------+---------+--------+ | Data | Common | Investor | Inv_In | Inv_Out | S | +------------+--------+----------+--------+---------+--------+ | 2014-10-10 | 100.00 | 0 | NULL | NULL | NULL | | 2014-10-10 | 100.00 | 1 | 100.00 | NULL | 100.00 | | 2014-10-10 | 100.00 | 2 | NULL | NULL | NULL | | 2014-10-10 | 100.00 | 3 | NULL | NULL | NULL | | 2014-10-11 | 100.00 | 0 | NULL | 20.00 | NULL | | 2014-10-11 | 100.00 | 1 | NULL | NULL | 100.00 | | 2014-10-11 | 100.00 | 2 | NULL | NULL | NULL | | 2014-10-11 | 100.00 | 3 | NULL | NULL | NULL | | 2014-10-12 | 280.00 | 0 | NULL | NULL | -20.00 | | 2014-10-12 | 280.00 | 1 | NULL | 80.00 | 100.00 | | 2014-10-12 | 280.00 | 2 | 200.00 | NULL | 200.00 | | 2014-10-12 | 280.00 | 3 | NULL | NULL | NULL | | 2014-10-13 | 250.00 | 0 | 50.00 | NULL | 30.00 | | 2014-10-13 | 250.00 | 1 | NULL | NULL | 20.00 | | 2014-10-13 | 250.00 | 2 | NULL | NULL | 200.00 | | 2014-10-13 | 250.00 | 3 | NULL | NULL | NULL | | 2014-10-14 | 400.00 | 0 | NULL | NULL | 30.00 | | 2014-10-14 | 400.00 | 1 | NULL | NULL | 20.00 | | 2014-10-14 | 400.00 | 2 | NULL | NULL | 200.00 | | 2014-10-14 | 400.00 | 3 | 150.00 | NULL | 150.00 | +------------+--------+----------+--------+---------+--------+ А вот при повторных начинается бред: +------------+--------+----------+--------+---------+--------+ | Data | Common | Investor | Inv_In | Inv_Out | S | +------------+--------+----------+--------+---------+--------+ | 2014-10-10 | 100.00 | 0 | NULL | NULL | NULL | | 2014-10-10 | 100.00 | 1 | 100.00 | NULL | 200.00 | | 2014-10-10 | 100.00 | 2 | NULL | NULL | NULL | | 2014-10-10 | 100.00 | 3 | NULL | NULL | NULL | | 2014-10-11 | 100.00 | 0 | NULL | 20.00 | NULL | | 2014-10-11 | 100.00 | 1 | NULL | NULL | 610.00 | | 2014-10-11 | 100.00 | 2 | NULL | NULL | NULL | | 2014-10-11 | 100.00 | 3 | NULL | NULL | NULL | | 2014-10-12 | 280.00 | 0 | NULL | NULL | -20.00 | | 2014-10-12 | 280.00 | 1 | NULL | 80.00 | 200.00 | | 2014-10-12 | 280.00 | 2 | 200.00 | NULL | 400.00 | | 2014-10-12 | 280.00 | 3 | NULL | NULL | NULL | | 2014-10-13 | 250.00 | 0 | 50.00 | NULL | 30.00 | | 2014-10-13 | 250.00 | 1 | NULL | NULL | 120.00 | | 2014-10-13 | 250.00 | 2 | NULL | NULL | 320.00 | | 2014-10-13 | 250.00 | 3 | NULL | NULL | NULL | | 2014-10-14 | 400.00 | 0 | NULL | NULL | 460.00 | | 2014-10-14 | 400.00 | 1 | NULL | NULL | 80.00 | | 2014-10-14 | 400.00 | 2 | NULL | NULL | 280.00 | | 2014-10-14 | 400.00 | 3 | 150.00 | NULL | 430.00 | +------------+--------+----------+--------+---------+--------+ Как я понимаю, это связано с тем, что в переменной @S остается значение от предыдущего запроса. Как с этим бороться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 10:15:14 |
|
||
|
Инициализация пользовательской переменной
|
|||
|---|---|---|---|
|
#18+
KSVSVK Код: sql 1. 2. таки я ещё раз поинтересуюсь - зачем вам тут этот джойн? особенно в свете написанного в секции "групбай". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 10:20:35 |
|
||
|
Инициализация пользовательской переменной
|
|||
|---|---|---|---|
|
#18+
KSVSVKКак я понимаю, это связано с тем, что в переменной @S остается значение от предыдущего запроса. Как с этим бороться?Пральна понимаешь. Инициализировать-то значение за тебя кто будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 11:18:12 |
|
||
|
Инициализация пользовательской переменной
|
|||
|---|---|---|---|
|
#18+
tanglir, Этот Join обеспечивает перебор всех инвесторов вне зависимости от того, был у них ввод-вывод средств в данный день или нет. Если его убрать, то часть строк результата будет убрано, а это неудобно в дальнейшем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 11:25:03 |
|
||
|
Инициализация пользовательской переменной
|
|||
|---|---|---|---|
|
#18+
Akina, Вот я и не могу понять, как его инициализировать. Пробовал так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Получилась чушь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 11:29:28 |
|
||
|
Инициализация пользовательской переменной
|
|||
|---|---|---|---|
|
#18+
а если прсото отправить команду инициализации переменой? а вообще логично, если инициализировать переменную в секции селект(секция которая выполняеться для каждой строкит) то будет чушь. надо в секции фром ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 12:34:46 |
|
||
|
Инициализация пользовательской переменной
|
|||
|---|---|---|---|
|
#18+
from Invest ----- from Invest, (@S := 0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 12:35:37 |
|
||
|
Инициализация пользовательской переменной
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, Если так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. то выдает ошибку ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@S := 0) left join Invest B on true group by A.Data, B.Investor' at line 11 mysql> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 12:42:01 |
|
||
|
Инициализация пользовательской переменной
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 12:49:30 |
|
||
|
Инициализация пользовательской переменной
|
|||
|---|---|---|---|
|
#18+
KSVSVKЭтот Join обеспечивает перебор всех инвесторов вне зависимости от того, был у них ввод-вывод средств в данный день или нет.Для этого лучше использовать опорную таблицу дат. Имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 12:58:36 |
|
||
|
Инициализация пользовательской переменной
|
|||
|---|---|---|---|
|
#18+
KSVSVK, Вопрос -- какова логика обнуления @S ? Только на Delta=NULL ? МОгут ли все Делта быть не нул и сумма накапливается все время? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 15:11:03 |
|
||
|
Инициализация пользовательской переменной
|
|||
|---|---|---|---|
|
#18+
Akina, Ваш вариант обеспечивает стабильность результата. Вот только сам результат при этом неправильный :( Буду разбираться почему. mysql> select A.Data, -> (select sum(Delta) from Invest -> where Data < A.Data or (Data = A.Data and Delta > 0)) as Common, -> B.Investor, -> (select sum(Delta) from Invest -> where Investor = B.Investor and Data = A.Data and Delta > 0) as Inv_In, -> (select sum(-Delta) from Invest -> where Investor = B.Investor and Data = A.Data and Delta < 0) as Inv_Out , -> (select @S := format(ifnull(@S, 0) + Sum(Delta), 2) from Invest -> where Investor = B.Investor and(Data < A.Data or(Data = A.Data and Del ta > 0))) S -> from Invest A, Invest B, (select @S := 0) dummy -> group by A.Data, B.Investor; +------------+--------+----------+--------+---------+--------+ | Data | Common | Investor | Inv_In | Inv_Out | S | +------------+--------+----------+--------+---------+--------+ | 2014-10-10 | 100.00 | 0 | NULL | NULL | NULL | | 2014-10-10 | 100.00 | 1 | 100.00 | NULL | 100.00 | | 2014-10-10 | 100.00 | 2 | NULL | NULL | NULL | | 2014-10-10 | 100.00 | 3 | NULL | NULL | NULL | | 2014-10-11 | 100.00 | 0 | NULL | 20.00 | NULL | | 2014-10-11 | 100.00 | 1 | NULL | NULL | 350.00 | | 2014-10-11 | 100.00 | 2 | NULL | NULL | NULL | | 2014-10-11 | 100.00 | 3 | NULL | NULL | NULL | | 2014-10-12 | 280.00 | 0 | NULL | NULL | -20.00 | | 2014-10-12 | 280.00 | 1 | NULL | 50.00 | 200.00 | | 2014-10-12 | 280.00 | 2 | 200.00 | NULL | 200.00 | | 2014-10-12 | 280.00 | 3 | NULL | NULL | NULL | | 2014-10-13 | 280.00 | 0 | 50.00 | NULL | 30.00 | | 2014-10-13 | 280.00 | 1 | NULL | NULL | 400.00 | | 2014-10-13 | 280.00 | 2 | NULL | NULL | 200.00 | | 2014-10-13 | 280.00 | 3 | NULL | NULL | NULL | | 2014-10-14 | 430.00 | 0 | NULL | NULL | 10.00 | | 2014-10-14 | 430.00 | 1 | NULL | NULL | 250.00 | | 2014-10-14 | 430.00 | 2 | NULL | NULL | 400.00 | | 2014-10-14 | 430.00 | 3 | 150.00 | NULL | 150.00 | +------------+--------+----------+--------+---------+--------+ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 15:59:00 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38786436&tid=1834035]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 290ms |

| 0 / 0 |
