|
Транспонировать несколько статусов
|
|||
---|---|---|---|
#18+
Всем привет! Очень нужен запрос, который будет формировать в существующую таблицу новвые столбцы, на основе нескольких "статусов" из рядов и добавлять к ним дату того или иного статуса. Пример. id Дата обновления В статус 12 09.08.2017 in_progress 12 09.08.2017 approved 100 09.08.2017 in_progress 100 10.08.2017 correction 100 11.08.2017 approved необходимо вынести статусы из "В статус" в столбцы, и уже к каждому столбцу статуса подцепить дату обновления (по сути, перехода в данный статус) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 11:51 |
|
Транспонировать несколько статусов
|
|||
---|---|---|---|
#18+
Использовать функцию CROSSTAB(). Для этого её надо сначала установить в базу командой CREATE EXTENSION IF NOT EXISTS tablefunc; Описание CROSSTAB и примеры найдёте в google. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 12:10 |
|
Транспонировать несколько статусов
|
|||
---|---|---|---|
#18+
Partisan M, А можно с примером запроса? Заранее большое спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 12:26 |
|
Транспонировать несколько статусов
|
|||
---|---|---|---|
#18+
у меня записан один пример запроса. Вообще-то их легко найти в google по словам postgresql crosstab, а также надо посмотреть описание crosstab в документации. Пример был по адресу ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 12:33 |
|
Транспонировать несколько статусов
|
|||
---|---|---|---|
#18+
В итоге, нашелся старый MySQL запрос. Но к сожалению, переделать его в Postgres не вышло. Суть: создаю столбцы в таблице с наименованиями статусов: alter table expertise_subject_surveys add column mks_approval timestamp DEFAULT NULL; Далее старый mysql-запрос: update expertise_subject_surveys es2 inner join( select es.id id, max(st.created_at) approval_last from expertise_subject_surveys es inner join state_transitions st ON st.statable_id = es.id AND st.statable_type = 'Expertise::SubjectSurvey' and st.to_status = 'on_mks_approval' group by es.id) aa on aa.id = es2.id set es2.mks_approval = aa.approval_last; По сути - должен заполнять столбец mks_approval датами из статуса "on_mks_approval", благодаря столбцу дат из st.created_at ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2019, 12:42 |
|
Транспонировать несколько статусов
|
|||
---|---|---|---|
#18+
Мне казалось, что я ответил. На основе примеров это легко сделать (если под транспонированием понималось превращение строк в столбцы). В MySQL (и в Oracle) для поворачивания таблицы вместо функции CROSSTAB используется выражение PIVOT в операторе SELECT. CROSSTAB или PIVOT можно заменить на несколько UNION, но эта запись менее компактная и наглядная. В вашем примере на MySQL мне разбираться не захотелось. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2019, 13:23 |
|
Транспонировать несколько статусов
|
|||
---|---|---|---|
#18+
Спасибо за ответ. Но это не совсем так. В моей задаче необходимо не только в ручную создать столбцы с несколькими вариантами статусов, но и автоматически подтянуть дату из st.created_at к тому или иному статусу. По логике Вашего запроса, я должен в ручную внести все даты к статусу (а их несколько тысяч). В рамках одного ID (es2.id) может быть несколько итераций одного статуса. Вот эту уникальную дату я и хочу засунуть к конкретному статусу, в столбец. Как я и привел в первом примере, есть сейчас : id Дата обновления В статус 12 09.08.2017 in_progress 12 09.08.2017 approved 100 09.08.2017 in_progress 100 10.08.2017 correction 100 11.08.2017 approved А нужно: id in_progress approved correction 12 09.08.2017 09.08.2017 15.08.2017 12 15.08.2017 16.08.2017 15.08.2017 100 11.01.2017 12.08.2017 null 100 17.05.2017 19.05.2017 18.05.2017 100 25.07.2017 30.07.2017 null ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2019, 14:19 |
|
Транспонировать несколько статусов
|
|||
---|---|---|---|
#18+
Видимо, я все же был не прав, описываю задачу. Скорее мне нужно разбить пул дат из поля created_at в зависимости от того или иного статуса из поля to_status , создав столбцы с датами, обозвав их именем статуса... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 13:05 |
|
Транспонировать несколько статусов
|
|||
---|---|---|---|
#18+
Это надо? Код: 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.
Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2019, 01:11 |
|
|
start [/forum/moderation_log.php?user_name=Muhammad]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 444ms |
total: | 586ms |
0 / 0 |