|
|
|
выбрать лучший из трех вариантов
|
|||
|---|---|---|---|
|
#18+
есть таблица-источник мусорных данных (в примере ниже - dat ), в которой в одной строке содержится 3 (три!) идентификатора адреса есть не менее мусорный справочник адресов (regions ), в котором некоторые адреса заполнены полностью, некоторые - с пропусками полей задача - соединив таблицы, найти для каждой из строк данных самый заполненный адрес - и вернуть его ID (result_needed в примере ниже) вопрос - как это сделать красиво (без большой многоэтажности и хранимых функций) пример: Код: 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. спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 11:20 |
|
||
|
выбрать лучший из трех вариантов
|
|||
|---|---|---|---|
|
#18+
Alexus12 Код: plsql 1. "Первость" не раскрыта. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 11:37 |
|
||
|
выбрать лучший из трех вариантов
|
|||
|---|---|---|---|
|
#18+
Alexus12, Ты бы пример желаемого результата привел, не все люди обладают телепатическими способностями, чтобы домыслить это по твоей недопостановке задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 11:42 |
|
||
|
выбрать лучший из трех вариантов
|
|||
|---|---|---|---|
|
#18+
AmKadпример желаемого результатаAlexus12 Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 11:49 |
|
||
|
выбрать лучший из трех вариантов
|
|||
|---|---|---|---|
|
#18+
Elic, спасибо, решение красивое! вопрос в масштабируемости - что будет на гигантских справочниках (100 тыс+ строк в REGIONS)? подзапрос же хочет nested loops для каждой строки данных? возможен ли вариант через HASH\FTS? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 12:11 |
|
||
|
выбрать лучший из трех вариантов
|
|||
|---|---|---|---|
|
#18+
Alexus12вопрос в масштабируемости - что будет на гигантских справочниках (100 тыс+ строк в REGIONS)? подзапрос же хочет nested loops для каждой строки данных? возможен ли вариант через HASH\FTS? На серьезных системах возможен и желателен вариант предварительно очистки данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 14:14 |
|
||
|
выбрать лучший из трех вариантов
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, к сожалению, это аналитическая задача (поиск алмазов среди имеющегося в двх мусора) есть решение через hash\fts? в лоб напрашивается такой алгоритм над запросом из первого поста (где будет как раз FTS\HASH): 1) добавить три вычисляемых поля: "CASE WHEN проверяем поля 1...3 справочника на null then вернуть рейтинг заполненности справочника" - получаем три поля (по одному на справочник) со значениями весов от 0 (все пусто) до 3 (все заполнено), например 0, 2, 1 2) вычисляем greatest из трех полей п.1 - получаем максимальное значение рейтинга среди трех вычисленных = 2 3) теперь нужно получить ID записи справочника, соответствующий найденному greatest весу. опять case - when (результат greatest) = весу справочника 1 then id_справ_1, ELSE сверим со вторым и тд.... есть решение красивее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 14:56 |
|
||
|
выбрать лучший из трех вариантов
|
|||
|---|---|---|---|
|
#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. есть решение красивее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 17:43 |
|
||
|
выбрать лучший из трех вариантов
|
|||
|---|---|---|---|
|
#18+
Alexus12есть решение красивее?Тупо, как валенок: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 18:00 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39487371&tid=1885601]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 426ms |

| 0 / 0 |
