|
|
|
Запрос!
|
|||
|---|---|---|---|
|
#18+
Привет Всем! У меня такая ситуация, хотя можно её решить др способом, но слишком уж интересно стало. Есть таблица клиентов и их платежи, таблица платежей. Задача, получить одним запросом всех клиентов (id,fio,dr ....) + последний платеж (pay_date, pay_sum). В db2 это можно было сделать так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Но в postgresql так не получается! Как можно это сделать!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 18:37 |
|
||
|
Запрос!
|
|||
|---|---|---|---|
|
#18+
Вот тема в которой это решилось! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 18:38 |
|
||
|
Запрос!
|
|||
|---|---|---|---|
|
#18+
Николаха, Курить LIMIT вместо FETCH ... LATERAL вместо table() и взять LEFT JOIN LATERAL () ON TRUE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 18:45 |
|
||
|
Запрос!
|
|||
|---|---|---|---|
|
#18+
Николаха, Код: sql 1. 2. 3. 4. 5. Конструкция `DISTINCT ON` специфична для Postgres'а и требует ORDER BY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 19:11 |
|
||
|
Запрос!
|
|||
|---|---|---|---|
|
#18+
qwwq, Еееееее..... Спасибо!!! ))))))))))) А что такое ON TRUE !? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 19:37 |
|
||
|
Запрос!
|
|||
|---|---|---|---|
|
#18+
vyegorov, Тоже вариант! )))) А какой запрос будет менее ресурсо затратным для сервера, если кол-во записей в таблице клиентов перевалит за 50 000, а таблица платежей, при условии что база ведется с начала тек года, 50 000*12 мес !? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 19:42 |
|
||
|
Запрос!
|
|||
|---|---|---|---|
|
#18+
Николахаvyegorov, Тоже вариант! )))) А какой запрос будет менее ресурсо затратным для сервера, если кол-во записей в таблице клиентов перевалит за 50 000, а таблица платежей, при условии что база ведется с начала тек года, 50 000*12 мес !? эти объёмы можно сгенерировать руками за 5 минут на тестовом сервере заодно и выкурить explayn analyze не забыть об индексах -- без них -- всё несколько иначе (без индексов выиграет скорее всего distinct on или вообще какая-нть аналитика) ON -- это ON сабкляуза кляузы join left там для неплательщиков по секрету скажу, что будь distinct on в планере реализован по человечьи -- он не отличался бы (в случае большого числа правильно проиндексированных платежей) планом от lateral . но оптимайзер пж тут пока не запинали (и вообще отсутствие миллионов индусов не на пользу планеру), зато синтаксис позволяет это все руками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 20:15 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39047381&tid=1997784]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 252ms |
| total: | 425ms |

| 0 / 0 |
