|
|
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
Есть задача, которую необходимо решить на Oracle. Всегда пытаюсь решить задачу в лоб, с точки зрения логики. Быстро пришел только к этому решению: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 18:42 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
julat21, Внимание вопрос: - Какую задачу я решал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 18:58 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
MaximaXXL,Не могу фото загрузить. Ни один хостинг картинок не грузит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 19:15 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
MaximaXXL, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 19:17 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
Кнопочка "выберите файл". Но картинкой - это неправильно. Исходные данные с with, описание логики задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 19:22 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 19:32 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 19:39 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
julat21, ваша задача, по сути, сводится к поиску "максимума снизу". в основу решения можно положить любой из методов, описанных тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 20:04 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, Я так и решал(Первое сообщение). Но решение не оптимальное. Есть другой способ, который мне неизвестен. Допустим с первой таблицы получить таблицу интервалов как-то или еще что-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 20:09 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
julat21, Вы не так решали. Коррелированные скалярный подзапрос в списке Select - даже не рассматривался как решение по приведенной ссылке... В предложении WHERE - да, но не в SELECT... Ваша задача сводится к джойну по неэкви-условию с последующей "фильтрацией" данных по любому из способов по ссылке. Можно натянуть её на рекурсивный WITH (если версия оракла позволяет - от 11g и выше). Возможно удастся получить "красивое" и эффективно использующее индексы (если таковые имеются и подходят под задачу) решение... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 20:18 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
julat21, почитайте про LAST/FIRST агрегатный. Вся ваша задача - это линейный запрос из B, в Select-листе которого одним из полей будет коррелированный скаляр к таблице A по условию соединения B.Dt >= A.Dt и выборкой нужного курса при помощи max(val) keep (dense_rank first order by a.dt desc) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 20:29 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, подскажите, пожалуйста, посмотрел все 6 вариантов, которые Вы указали по ссылке. Но они не учитывают, что необходимо учитывать даты не просто MAX по таблице А с группировкой по CUR, а на каждую строчку В необходимо учитывать, что дата в А меньше... Просто с JOIN два разных множества, я думаю, не решат задачу, даже с фильтрацией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 20:36 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
Само собой, ещё по типу валюты нужно вязать таблицы: Щукина Аннаjulat21, почитайте про LAST/FIRST агрегатный. Вся ваша задача - это линейный запрос из B, в Select-листе которого одним из полей будет коррелированный скаляр к таблице A по условию соединения B.Dt >= A.Dt and a.cur= b.cur и выборкой нужного курса при помощи max(val) keep (dense_rank first order by a.dt desc) такое неплохо ляжет на индекс, хоть и будет бегать нестед-лупсами. P.S. Почитать про FIRST в офф.доке , в блоках на Sql.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 20:37 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
julat21Щукина Анна, подскажите, пожалуйста, посмотрел все 6 вариантов, которые Вы указали по ссылке. Но они не учитывают, что необходимо учитывать даты не просто MAX по таблице А с группировкой по CUR, а на каждую строчку В необходимо учитывать, что дата в А меньше... Просто с JOIN два разных множества, я думаю, не решат задачу, даже с фильтрацией.вы дали картиночное описание задачи, я - словесное решение. :) Хотите конкретики - приведите удобные для использования тестовые данные в виде with (select ...) если схематично, то решение будет выглядеть так: Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 20:41 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
julat21, если бы ты не поленился и сделал исходные данные в виде with - тебе дали бы уже решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 20:41 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
Щукина Аннаjulat21Щукина Анна, подскажите, пожалуйста, посмотрел все 6 вариантов, которые Вы указали по ссылке. Но они не учитывают, что необходимо учитывать даты не просто MAX по таблице А с группировкой по CUR, а на каждую строчку В необходимо учитывать, что дата в А меньше... Просто с JOIN два разных множества, я думаю, не решат задачу, даже с фильтрацией.вы дали картиночное описание задачи, я - словесное решение. :) Хотите конкретики - приведите удобные для использования тестовые данные в виде with (select ...) если схематично, то решение будет выглядеть так: Код: plsql 1. 2. 3. 4. скалярный подзапрос можно переписать на джойн. возможно, это позволит ораклу оптимальнее выполнить запрос. оно во многом будет завиветь от схемы индексирования и от того, как именно количественно распределены данные по таблицам... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 20:44 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 20:49 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
julat21, возможно, "примерный" аналог на JOIN: Код: plsql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 20:53 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, Спасибо большое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2018, 21:06 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 04:29 |
|
||
|
Подскажите правильное решение задачи
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 09:08 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39647826&tid=1883968]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
198ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 512ms |

| 0 / 0 |
