|
Посоветуйте варианты
|
|||
---|---|---|---|
#18+
MySQL v8.0.13.0. Задача - выбрать долг ( d.debt ) всех контрагентов ( c.id ) в месяц ( d.period , задается 1-м числом месяца года). Решается так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Теперь требуется получить то же самое, но только не за один месяц, а за некоторый период "от" и "до", также задаваемый 1-м числом месяца года, с шагом 1 месяц. К примеру, для "от"='2018-10-01' и "до"='2019-02-01' d.period в запросе должно принимать значения: '2018-10-01', '2018-11-01', '2018-12-01', '2019-01-01', '2019-02-01'. Соответственно, запрос должен вернуть id контрагента и для него 5 значений debt из разного d.period . Какие есть варианты решения задачи, кроме последовательного многократного выполнения запроса с изменяемым параметром, передаваемым в d.period ? Если они есть, конечно... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 13:58 |
|
Посоветуйте варианты
|
|||
---|---|---|---|
#18+
Ну тебе ж рекурсивные CTE доступны... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 15:35 |
|
Посоветуйте варианты
|
|||
---|---|---|---|
#18+
Akina, Ну, доступны-то они доступны... но пока они выше моего понимания :) Написал я так: Код: sql 1. 2. 3. 4. 5. 6.
Выдает: iddebtperiod102018-10-01102018-11-01102018-12-01102019-01-01102019-02-01202018-10-01202018-11-01202018-12-01202019-01-01202019-02-01302018-10-01302018-11-01302018-12-01302019-01-01302019-02-01402018-10-0141158.682018-11-014823.292018-12-0141385.392019-01-0142535.212019-02-01.........26220NULLNULL26345NULLNULL26352NULLNULL26365NULLNULL26378NULLNULL И вроде поначалу есть по 5 значений debt для одного контрагента (пусть и не столбиком рядом, а последовательно), но к концу полученного результата id идут уже в совсем непонятном порядке. Да и последним id должен быть = 26448. Помогите, пожалуйста, скорректировать запрос так, чтобы на выходе было примерно следующее: iddebt_2018-10-01debt_2018-11-01debt_2018-12-01debt_2019-01-01debt_2019-02-01100000..................26448NULLNULLNULLNULLNULL ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 16:38 |
|
Посоветуйте варианты
|
|||
---|---|---|---|
#18+
LiYing чтобы на выходе было примерно следующее ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 16:54 |
|
Посоветуйте варианты
|
|||
---|---|---|---|
#18+
LiYing, pivot на мускуле реализуется через SUM. Не ваш случай, но в качестве примера подойдет, думаю Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 06:41 |
|
Посоветуйте варианты
|
|||
---|---|---|---|
#18+
Akina, Ваша процедура и тест работают хорошо. Однако, я все равно не понимаю, как мне выбрать данные в моем случае, чтобы передать их на вход pivot. Any help? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 09:27 |
|
Посоветуйте варианты
|
|||
---|---|---|---|
#18+
LiYing как мне выбрать данные в моем случае ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 09:49 |
|
Посоветуйте варианты
|
|||
---|---|---|---|
#18+
ДОБРЫЙ ДЕНЬ! ЕСТЬ 2 ЗАПРОСА. кАК МНЕ ВЫЧЕСТЬ РЕЗУЛЬТАТ ОДНОГО ЗАПРОСА ОТ РЕЗУЛЬТАТА ДРУГОГО ЗАПРОСА: 1 ЗАПРОС: select s.operator,avg(s.billsec) from (select s.operator,s.billsec, @rownum11:=@rownum11+1 as row_number, @total_rows:=@rownum11 from cc_sessions s, (select @rownum11=0) r where s.billsec > 20 and s.op_answer_time between '2020-03-17 00:00:00' and '2020-03-18 23:59:59' and s.operator='5655' order by billsec asc) s where s.row_number in (floor((@total_rows+1)/2),floor((@total_rows+2)/2)) 2 ЗАПРОС: select t.operator, sum(t.billsec)/2 from ( SELECT k.row_number,k.operator,k.op_answer_time, k.billsec from ( SELECT COUNT(billsec)*0.25 as quart from (select @rownum18:=@rownum18+1 as row_number, operator,op_answer_time, billsec from cc_sessions where operator='5655' AND op_answer_time between '2020-03-17 00:00:00' and '2020-03-18 23:59:59' AND billsec >20 order by billsec) r)r, (select @rownum19:=@rownum19+1 as row_number, operator,op_answer_time, billsec from cc_sessions where operator='5655' AND op_answer_time between '2020-03-17 00:00:00' and '2020-03-18 23:59:59' AND billsec >20 order by billsec) k where k.row_number in (floor(r.quart),ceil(r.quart)) )t group by t.operator ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2020, 06:39 |
|
|
start [/forum/topic.php?fid=47&fpage=24&tid=1828692]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 300ms |
total: | 438ms |
0 / 0 |