|
|
|
интересный sql запрос
|
|||
|---|---|---|---|
|
#18+
таблица px123268 таблица ty13730 надо получить итоговую таблицу sxy1123332367830 т.е. для каждого значения из таблицы p подобрать одно значение из таблицы t (наименьшее большее) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 09:46 |
|
||
|
интересный sql запрос
|
|||
|---|---|---|---|
|
#18+
PCContra, вас вполне устроит кореллят. или lateral -- если нужно не одно поле, а всю запись. усё -- стандартное RTFM ничего интересного в этом нет. Интересно смотреть на планы для миллионных таблиц, и ковырять у носе с мысляме о высокомЪ, шпинделях, оборотах, и тапе. но это другая история. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 10:12 |
|
||
|
интересный sql запрос
|
|||
|---|---|---|---|
|
#18+
а на примере? Запрос-то, в-общем, должен быть не сложный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 11:58 |
|
||
|
интересный sql запрос
|
|||
|---|---|---|---|
|
#18+
PCContraа на примере? Запрос-то, в-общем, должен быть не сложныйв ora-- форуме есть стандартное требование к заданию вопроса такого типа. не помню точно, но основное: напишите сами 1. источники данных 2. то как пытались 1. в нашем случае -- cte Код: sql 1. 2. 3. и т.п. а только потом просите поправить ваш код. так как все примеры есть в RTFM. что такое LATERAL -- можете тут в количествах найти. А писать рутину за вас -- тут никто не подряжался. Да и скучно это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 12:41 |
|
||
|
интересный sql запрос
|
|||
|---|---|---|---|
|
#18+
или полуджоин огруппировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 13:10 |
|
||
|
интересный sql запрос
|
|||
|---|---|---|---|
|
#18+
Я пробовал так: Код: sql 1. 2. 3. думал пройдет на шару, типа в таблице t значения идут в порядке убывания, и для джойна выберется первое наименьшее значение, удовлетворяющее условию. Фиг там, выбрались все. Пробовал еще так, через функцию: Код: sql 1. 2. 3. Но т.к., походу, в пг не существует функции, которая бы возвращала из массива значение (в нашем случае - наименьшее большее значение, чем переменная $1 ), то я тут в ступоре. Тут надо думать, как выбрать из массива (FROM массив не катит), или массив сделать как табличку (как в первом посте) - я не знаю. ------------------ И да, кстати, мысли о высоком - это одно, а прикладные и, согласитесь, простые на первый взгляд задачи - бывают намного тяжелее и приносят больше пользы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 07:44 |
|
||
|
интересный sql запрос
|
|||
|---|---|---|---|
|
#18+
PCContraто я тут в ступоре.ещё раз qwwqвсе примеры есть в RTFM. что такое LATERAL -- можете тут в количествах найтив частности, для решения вашей задачи в латерал-пример из факинмануала надо всего лишь дописать ордербай+лимит (ну и равенство на неравенство исправить) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 08:06 |
|
||
|
интересный sql запрос
|
|||
|---|---|---|---|
|
#18+
PCContraЯ пробовал так: Код: sql 1. 2. 3. думал пройдет на шару, типа в таблице t значения идут в порядке убывания, и для джойна выберется первое наименьшее значение, удовлетворяющее условию. Фиг там, выбрались все. Пробовал еще так, через функцию: Код: sql 1. 2. 3. Но т.к., походу, в пг не существует функции, которая бы возвращала из массива значение (в нашем случае - наименьшее большее значение, чем переменная $1 ), то я тут в ступоре. Тут надо думать, как выбрать из массива (FROM массив не катит), или массив сделать как табличку (как в первом посте) - я не знаю. ------------------ И да, кстати, мысли о высоком - это одно, а прикладные и, согласитесь, простые на первый взгляд задачи - бывают намного тяжелее и приносят больше пользы 1. Код: plsql 1. 2. 3. 2. Код: plsql 1. 2. 3. По скорости (и по сути) одинаково но первый работает только если у t 1 колонка а второй работает с любым количеством колонок у t. PS: Если у p есть primary key то можно еще ваш LEFT JOIN доделать добавив min(t.x) + GROUP BY p.primary_key (но это менее эффективно по скорости будет). -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 08:15 |
|
||
|
интересный sql запрос
|
|||
|---|---|---|---|
|
#18+
Спасибо, Максим! А через функцию, где второй параметр - это или массив, или табличка? Можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 09:25 |
|
||
|
интересный sql запрос
|
|||
|---|---|---|---|
|
#18+
Я, так понимаю, там задача сводится либо к тому, как массив преобразовать к таблице (т.е. из массива сделать столбик значений), либо как выбрать значение из массива по условию (все тому же - наименьшее большее). Это уже, в принципе, не нужно. Так, просто интресно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 09:41 |
|
||
|
интересный sql запрос
|
|||
|---|---|---|---|
|
#18+
PCContra<...> в пг не существует функции, которая бы возвращала из массива значение<...> Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 10:26 |
|
||
|
интересный sql запрос
|
|||
|---|---|---|---|
|
#18+
PCContraкак массив преобразовать к таблицеи ещё разqwwqвсе примеры есть в RTFM http://www.postgresql.org/docs/9.2/static/functions-array.html - unnest ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 10:30 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38978681&tid=1997951]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
174ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 504ms |

| 0 / 0 |
