|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
есть таблица с тремя столбцами HASHIDSEQUENCE_NUMBERfile_name aaa1a1.csvaaa2a1.csvaaa3a1.csvaaa1a2.csvbbb1a1.csvbbb2a1.csvbbb1a1.csvbbb2a3.csv искомый результат, для каждого кода нужно найти максимальную комбинацию SEQUENCE_NUMBER,file_name причем file_name старше, т.е. для каждого кода найти максимальный файл в котором он встречается, а в нем найти максимальный SEQUENCE_NUMBER HASHIDSEQUENCE_NUMBERfile_name aaa 1 a2.csvbbb 2 a3.csv можно ли сделать элегантнее? Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 20:09 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
сортировка по имени файла условная, в реальной задаче там идет парсинг имени, но для упрощения считаем что сортировка стрики дает нужный результат для поиска максимального значения ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 20:11 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
Sintetik, самая обычная группировка: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 20:18 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 12:38 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
SQL*Plus, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 13:59 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#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.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 14:04 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
SY, Код: 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.
:-) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 14:15 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
SQL*Plus, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 14:17 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
SYSQL*Plus, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
SY.Да. Вижу, что вы тоже быстро обнаружили свою неточность и исправили запрос... :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 14:18 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
группировка через аналитику? .... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 14:33 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
xtenderгруппировка через аналитику? .... А в чем проблема? И чем KEEP не аналитика по DENSE_RANK + фильтр FIRST/LAST? SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 14:52 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
SQL*Plus, Код: 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. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67.
.... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 14:59 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
Stax, Тут и проблема с числами: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Числа надо "выравнивать": Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
А '~' использовать нельзя (как ты и показал). Использовать надо CHR(0): Код: 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.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 15:29 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
SYИспользовать надо CHR(0) Однажды наткнулся на клиента, в данных которого таки был chr(0) - имеет смысл проявлять некоторую осторожность :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 16:00 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
andrey_anonymousОднажды наткнулся на клиента, в данных которого таки был chr(0) - имеет смысл проявлять некоторую осторожность :) В принципе - да, но в имeни файла вроде как нет :). SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 16:22 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
SYxtenderгруппировка через аналитику? .... А в чем проблема? И чем KEEP не аналитика по DENSE_RANK + фильтр FIRST/LAST? SY.абсолютно разные алгоритмы, функции и выделение памяти - сравни планы ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 16:55 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
Не все так однозначно... SYЧисла надо "выравнивать": Код: plsql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 17:15 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
xtenderабсолютно разные алгоритмы не могу догадатся почему ,max(file_name )keep(dense_rank first order by file_name desc, sequence_number desc) as max_file_name простого max(file_name ) недостаточно? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 17:19 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
andrey_anonymousНе все так однозначно... SYЧисла надо "выравнивать": Код: plsql 1. 2. 3. 4. 5. 6.
в чем подвох (если считать что 21901900 отрабатывает правильно)? .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 17:23 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
xtenderабсолютно разные алгоритмы, функции и выделение памяти - сравни планы Имплементация разная - логика примерно та-же. Что GROUP BY, что PARTITION BY разбивают set на группы и вычисляют DENSE_RANK (GROUP BY) или ROW_NUMBER (аналитикa c ORDER BY для FIRST или ORDER BY DESC для LAST). Дальше GROUP BY берет строки (а их может быть > 1) с FIRST или LAST DENSE_RANK и аггрегирует. С аналитикой мы делаем то-же через in-lion view/with clause фильтруя по ROW_NUMBER = 1. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 17:25 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
Staxв чем подвох (если считать что 21901900 отрабатывает правильно)? stax Андрей о том что a10.csv должен быть > a2.csv. Hо это другая проблема. Если сравнивать надо как alphanumeric то это решается например регуляркой. Скажем numeric порции <= 10 цифр: Код: 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.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 17:45 |
|
красивее найти максимум по двум полям
|
|||
---|---|---|---|
#18+
SYИмплементация разная - логика примерно та-же. Аналитика по сути должна формировать (и часто материализовать в temp) весь rowset, который лишь на следующем шаге плана будет почитан (в т.ч. из temp), отфильтрован, агрегирован. Агрегация же зачастую может себе позволить инкрементально копить агрегаты прямо из потока базового rowsource, что снижает требования к памяти и ресурсам на промежуточных шагах плана. По этой причине лично я избегаю применения аналитики там, где достаточно агрегации. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 18:14 |
|
|
start [/forum/topic.php?fid=52&msg=39823461&tid=1882425]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 268ms |
total: | 423ms |
0 / 0 |