Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
14.06.2019, 10:02
|
|||
---|---|---|---|
|
|||
горизонтальное объединение таблиц (по столбцам) без JOIN |
|||
#18+
Доброго дня! Не могу найти простое решение простой задачи. Есть 2 запроса: Код: plsql 1. 2. 3.
Нужно из них получить таблицу: Код: plsql 1. 2. 3.
Как это сделать самым быстрым способом? Вариант с Row_Number() очень долгий - в реальном запросе 5 млн строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.06.2019, 10:09
|
|||
---|---|---|---|
|
|||
горизонтальное объединение таблиц (по столбцам) без JOIN |
|||
#18+
Толикman, а если кол-во строк, возвращаемое "подзапросами", будет разное? К примеру - один вернул три строки, другой - десять ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.06.2019, 12:36
|
|||
---|---|---|---|
|
|||
горизонтальное объединение таблиц (по столбцам) без JOIN |
|||
#18+
ТоликmanДоброго дня! Не могу найти простое решение простой задачи. Есть 2 запроса: Код: plsql 1. 2. 3.
Нужно из них получить таблицу: Код: plsql 1. 2. 3.
Как это сделать самым быстрым способом? Вариант с Row_Number() очень долгий - в реальном запросе 5 млн строк. Это не простая задача а что то очень кривое. В реальности таких задач не бывает. Что значит по столбцам? Порядок результатов без order by в запросах не специфицирован и может считаться условно случайным. Как вы это обьединять собираетесь? Ну и как вам уже написали а если количество строк разное? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.06.2019, 09:34
|
|||
---|---|---|---|
|
|||
горизонтальное объединение таблиц (по столбцам) без JOIN |
|||
#18+
Это не кривая задача, и она реально есть, вот сейчас. Запросы гарантировано возвращают отсортированные наборы данных одинакового размера, пример выше упрощён. Сейчас есть join, но происходит он по row_number(), который не индексирован, поэтому долго. Создать таблицы возможности нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.06.2019, 10:41
|
|||
---|---|---|---|
горизонтальное объединение таблиц (по столбцам) без JOIN |
|||
#18+
Толикman, откройте 2 курсора и фетчите в перемежку по одной записи . прямо с клиента. просто задача не "для sql" -- который больше язык работы с множествами, чем с курсорами и прочими предупорядоченными паковками. хотя если бы у вас было 2 массива, то unnest(array1,array2) решал бы вашу задачу в пж. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.06.2019, 12:49
|
|||
---|---|---|---|
|
|||
горизонтальное объединение таблиц (по столбцам) без JOIN |
|||
#18+
qwwqТоликman, откройте 2 курсора и фетчите в перемежку по одной записи . прямо с клиента. просто задача не "для sql" -- который больше язык работы с множествами, чем с курсорами и прочими предупорядоченными паковками. хотя если бы у вас было 2 массива, то unnest(array1,array2) решал бы вашу задачу в пж. Если уж пошла такая пьянка то конечно да вышеописанный пример через пару unnest решается (с использованием слабодокументированных фиче-багов): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
но какая будет скорость на 5М строк - у меня уверенности нет. Но вообще вы бы полный пример бы привели может там всетаки не надо сначала 2 упорядоченных набора создавать а потом думать как склеить а сразу нужный итог получиь можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.06.2019, 20:16
|
|||
---|---|---|---|
|
|||
горизонтальное объединение таблиц (по столбцам) без JOIN |
|||
#18+
Maxim BogukНо вообще вы бы полный пример бы привели может там всетаки не надо сначала 2 упорядоченных набора создавать а потом думать как склеить а сразу нужный итог получиь можно? Глобальные граничения - нельзя создавать таблицы, даже временные. Т.е. в нашем распоряжении только SELECT. Клиент - MS SSAS Tabular 2017, он может только выполнить запрос. Источник Greenplum (postgresql) Условия: 1. есть 2 таблицы с событиями, одно закрывает сервис, второе создает сервис. 2. отчетный период закрывается 15 числа месяца, следующего за отчетным. Задача: надо связать два события - закрытие старого сервиса и открытие нового в диапазоне от начала отчетного периода, до даты его закрытия. Из задачи вытекает одна проблема, отчетные периоды пересекаются, в связи с этим событие, произошедшее в первой половине месяца может быть связано как с предидущем отчетным периодом, так ис текущим. В связи с этим надо однозначно перевязать события. Сложность в том, что одного из событий может не существовать, поэтому просто их пронумероать и связать тоже нельзя. Проблем нет, если использовать таблицу, с двумя констрейнтами - каждый столбец содержит только уникальные ссылки на события, соответственно мы джоиним события по периодам, сортируем по дате наступления событий и начинаем запихивать данные в таблицу, игнорируя ошибки на уникальность, таким образом будут вставлены корректные сочетания, каждое событие быдет встречено только единожды и будет отнесено к самому раннему отчетному периоду в котором уему удалось связаться с другим событием. Код: sql 1. 2. 3. 4. 5.
Таблицы создавать нельзя, поэтому я решил после первого джойна пройтись оконной функцией поиска максимального айдишника каждого события MAX(A) OVER () AS max_a, MAX(B) OVER () AS max_b, выкинуть первую строку, и . Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Но да, пока писал текст и вспоминал оконные функции, нашел логично более оптимальный вариант: Код: sql 1. 2. 3. 4. 5. 6.
Спасибо всем! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.06.2019, 00:28
|
|||
---|---|---|---|
|
|||
горизонтальное объединение таблиц (по столбцам) без JOIN |
|||
#18+
Я ошибся, тест показал несостоятельность запроса: Из талице ниже он вернул: Код: sql 1. 2.
В общем как из этой таблицы: Код: sql 1. 2. 3. 4. 5.
Оставить строки: Код: sql 1. 2. 3.
Есть возможность выполнить только SELECT. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&mobile=1&tid=1995149]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 286ms |
total: | 428ms |
0 / 0 |