|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Приветствую Надо в 11й версии вставить в копию таблицы всю строку где в одном из столбцов значение максимально. Аналогичная - скопировать только последние строки исходников, например уже есть таблица: Код: plsql 1.
Насколько я знаю более менее быстро работает такой запрос Код: plsql 1. 2. 3. 4.
но инсерт ругается что лишний столбец rn Поэтому вопрос нельзя ли избежать явного перечисления многочисленных столбцов или более долгого запроса? Или insert * в любом случае быдлокод) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 17:49 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Aybo insert * в любом случае быдлокод ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 17:58 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Aybo, если очень хочется, select * from all_source a order by max(id) over(partition by a.owner, a.name) -a.id в первых (select count(*) from all_source a group by a.owner, a.name) строчках будет содержать нужные строчки. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 18:43 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
НеофитSQL, Это как-то сложно. Значит и еще проще задача - запихать через select into одну такую максимальную строку по конкретному name в переменную all_source%rowtype нельзя? Только pl/sql цикл с сортировкой и exit? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2020, 12:50 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Aybo Приветствую Надо в 11й версии вставить в копию таблицы всю строку где в одном из столбцов значение максимально. Код: plsql 1. 2.
авторАналогичная - скопировать только последние строки исходников, например уже есть таблица: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2020, 16:59 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Ага работает, спс ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2020, 17:44 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Aybo НеофитSQL, Это как-то сложно. Значит и еще проще задача - запихать через select into одну такую максимальную строку по конкретному name в переменную all_source%rowtype нельзя? Только pl/sql цикл с сортировкой и exit? Не так уж сложно: Код: plsql 1. 2. 3. 4. 5.
В отличие от решения предложенного Stax (которое мне нравится), этот также работает на представлениях и других result sets, у которых отсутствует rowid. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 15:52 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
НеофитSQL этот также работает на представлениях и других result sets, у которых отсутствует rowid. Грустно: ...бывают же извращенцы... В догонку к причинам, по которым не следует заниматься универсализмом на insert (для закрытого топика): env Колонки не менял. Кажется, оно сломалось. Код: 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.
Мораль: никогда не делайте insert без перечисления атрибутов. Особенно легко обмануться на широких таблицах, но и на узких бывают нежданчики. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 16:07 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
НеофитSQL, Дополнительно вычитать вьюху со сложным порядком соединений и посчитать агрегат, лишь бы звёздочку в запросе написать? Да уж, лихой вы танцор, что тут говорить. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 16:23 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
И это... Неофит, даже несмотря на ставшую уже традиционной бредовость подхода все еще есть что поковырять: Код: plsql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 16:35 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Stax авторАналогичная - скопировать только последние строки исходников, например уже есть таблица: Код: plsql 1. 2. 3.
..... stax Stax, я правильно понимаю, что если в исходных данных присутствует уникальный ключ, то его можно использовать вместо rowid, а если этот ключ с индексом, то и скорость будет сравнимая? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 16:46 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 16:49 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
andrey_anonymous И это... Неофит, даже несмотря на ставшую уже традиционной бредовость подхода все еще есть что поковырять: Код: plsql 1. 2. 3. 4. 5. 6. 7.
Первые две лучше и короче, спасибо. Насчет последней сомнения в производительности по сравнению с первыми двумя. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 17:01 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
НеофитSQL Stax, я правильно понимаю, что если в исходных данных присутствует уникальный ключ, то его можно использовать вместо rowid, а если этот ключ с индексом, то и скорость будет сравнимая? имхо, по rowid быстрее но по ключу тоже быстро, сравнимо зы в древних версиях rowid менялся в редких случаях ... ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 17:05 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
123йй Спасибо, это обсуждалось здесь ранее. Аксакалы вроде решили что rowid безопасен внутри запроса. 22228830 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 17:06 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
НеофитSQL Первые две лучше и короче, спасибо. Насчет последней сомнения в производительности по сравнению с первыми двумя. Традиционно не осознаете разницы между текстом написанным и программой исполненной. Впрочем, это всё вторично. Вы вот это разобрали внимательно? 22245618 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 17:25 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
НеофитSQL, Ещё раз. Любой инструмент имеет смысл использовать по назначению. Для разовых батчевых операций над одной физической таблицей в ad-hoc режиме, когда человек полностью понимает, что он делает - rowid выгоден. Для быстрого точечного обновления/удаления одной записи в коде/приложении - rowid можно использовать (и зачастую у компонент для работы с данными есть такая настройка). В качестве универсального решения для общего случая - недетерминировано, несопровождаемо, убивает идемпотентность на корню. Это не говоря уж о том, что мало применимо к вьюхам и имеет массу других ограничений по использованию. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 17:30 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
andrey_anonymous НеофитSQL Первые две лучше и короче, спасибо. Насчет последней сомнения в производительности по сравнению с первыми двумя. Традиционно не осознаете разницы между текстом написанным и программой исполненной. Впрочем, это всё вторично. Вы вот это разобрали внимательно? 22245618 Я посмотрел раньше. Насчет insert я согласен, поэтому не прокомментировал. Меня интересовал запрос в формате всей строки по другим причинам, для чтения. Решение с PK/UK вместо rowid меня вполне устраивает, а для многих ситуаций где у result set нет ключа, я могу сделать так, как показал ранее : отфильтровать по критерию, и отсчитать строки по числу групп. Еще Анна Щукина в недавней теме показала как можно сделать "with ties", если кому интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 17:34 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
НеофитSQL, Aybo "мешала" колонка rn, Вам она чем мешает? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 17:40 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Stax, 22245573 Лень ему, просто лень. Поэтому будет городить монструозные небезопасные конструкции, лишь бы поля не писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 18:10 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
env, вот современные интернет-ресурсы в правилах оговаривают бан за написание текстов , разжигающих ненависть. Похоже, корпоративные правила написания текстов запросов полностью игнорируют эту тему. Счастливый следующий все сломает по своему. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 18:14 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
env Stax, 22245573 Лень ему, просто лень. Поэтому будет городить монструозные небезопасные конструкции, лишь бы поля не писать. в перечислении, тоже есть минус синхронно поменяли структуры источника и приемника, а в copy не поправили, ничего не слетает, зато и не сохраняет пока боком не вылезет, работает ведь * слетит, сразу заметят ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 18:23 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Stax, Про звёздочку Андрей уже хорошо показал, к чему может привести. Stax синхронно поменяли структуры источника и приемника, Если при изменении структур не проверяются dependency, то это мягко говоря печально. А если добавляемые поля not null, то упадёт обязательно. От ошибки с порядком однотипных/конвертируемых полей по факту не спасёт ни *, ни перечисление. Разве что динамически каждый раз по словарю генерить список с проверкой наличия полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 18:35 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Stax, ну, andrey_anonymous намекал на замену последовательности полей. Представь, что это view - там это много более вероятно. Если переставленные поля совместимы по типу - так и будут мусор в данных получать годами. "Заметят" случайно, после ареста счетов налоговой инспекцией. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 18:37 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
env Stax, Про звёздочку Андрей уже хорошо показал, к чему может привести. многое от задачи зависит тихо работает, но неполно (неправильно), может быть болезненей чем разовый слет тем более после правки структур (ограничений) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 18:41 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Stax тихо работает, но неполно (неправильно), со звёздочкой куда вероятнее )) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 18:43 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
booby Stax, ну, andrey_anonymous намекал на замену последовательности полей. Представь, что это view - там это много более вероятно. Если переставленные поля совместимы по типу - так и будут мусор в данных получать годами. "Заметят" случайно, после ареста счетов налоговой инспекцией. видел я про переставленные поля но я себе не представляю такое в реале встречал и другое, в "name" хранили "сумму" (ето чтоб не создавать еще одну колонку) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 18:47 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Опять же, всё зависит от задачи. Если уж нужна полноценная копия, то и средства надо выбирать соответствующие, вплоть до внешних механизмов репликации типа GG. Для разового выполнения через CTAS where 1=0 + insert /*+ append */ select * - звёздочка допустима (при отсутствии виртуальных колонок и подобных ограничений). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 18:52 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Stax, ну, пусть не "переставленные", а просто добавлили поле в "середину". Вроде - работали с суммами в одной валюте, а потом надо добавить валюту, и, чтобы "красиво" читалось, рядом с суммой конечно. Или, еще лучше, долю от первой суммы, и, из тех же соображений, вставить ее между первой суммой и следующей за ней. А дальше все это уходит на такого клиента, который имеет манеру обращаться к содержимому по номеру поля в результате. Накреативить-по по лени - двигателю прогресса, можно немало. Звездочка - обычно и ложный и дорогой интерфейс, как в сопровождении, так и в смысле скорости. случаи всякие бывают, но каждый из них специальный. sql - вообще плохо живет в качестве абстрактного интерфейса за очень узкими рамками алгоритмов работы с множествами, которыми сам разработчик обычно, если вообще рулит, то только хинтами. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 18:55 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Stax, Натыкался на вариант заливки исторических данных в таблицу созданную по последнему состоянию из модели данных. Там был косяк архитектора - поля в модель добавлялись "как красивше", в отличие от таблицы в которую они добивались альтером в конец списка. И ведь даже отработало ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 18:56 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
env вплоть до внешних механизмов репликации типа GG в старых версия GG был очень дорогой в нас используют, и не без проблем ps шоб понятно было, я за ПОЛНОЕ перечисление полей но, лентяйство созблазняет звездочкой ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:00 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
booby А дальше все это уходит на такого клиента, который имеет манеру обращаться к содержимому по номеру поля в результате. Накреативить-по по лени - двигателю прогресса, можно немало. поменяли структуру, будьте готовы что аукнется, и не только из-за * и dbms_sql (по номеру поля) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:05 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Stax НеофитSQL, Aybo "мешала" колонка rn, Вам она чем мешает? ..... stax У меня сейчас нет конкретной задачи, где колонка мешает. Из прошлых задач, я делал промежуточную группировку/фильтрацию данных из 100500 колонок, где критерий фильтрации был основан на двух-трех из них. Акт фильтрации определен что %ROWTYPE на входе и выходе совпадает, иначе это не фильтрация а преобразование в другой формат, без чистого пути обратно. Пока у меня все подмножества данной таблицы одного типа, я могу легко с ними работать. Хочу - union, хочу - intersect. То, что перестановка или добавление/удаление колонок не потребует переделки моего кода, это бонус. Я пишу код так, чтоб не отбирал у меня потом у меня времени по пустякам. Неочевидность (для меня) как сделать тип-сохраняющую фильтрацию меня на этой неделе заинтересовала, поэтому я исследовал эту тему. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:10 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
НеофитSQL Я пишу код так, чтоб не отбирал у меня потом у меня времени по пустякам Пусть плачет отдел сопровождения? НеофитSQL я делал промежуточную группировку/фильтрацию данных из 100500 колонок, И что же было её результатом? Куда и в каком виде он передавался? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:18 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
Какие-то я тут слышу абсурдные мысли он некоторых. Или показалось? Задача: выбрать строку по ключу Moe решение: Код: plsql 1. 2. 3.
Кто-то собирается перечислять поля каждый раз, для такой задачи? Что это даст, кроме занятости? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:25 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
env НеофитSQL Я пишу код так, чтоб не отбирал у меня потом у меня времени по пустякам Пусть плачет отдел сопровождения? НеофитSQL я делал промежуточную группировку/фильтрацию данных из 100500 колонок, И что же было её результатом? Куда и в каком виде он передавался? В тот же код, который раньше читал нефильтрованные данные, или фильтрованные другими (также с соблюдением типа строки). Принцип фильтрации - выкинь строчки, не меняй их формат. Удивляюсь, если это не очевидно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:28 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
НеофитSQL, Конкретно для этого использования - применимо. з.ы. если потом это не отдаётся наружу внешнему клиенту, который не умеет переопределять rowtype на лету. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:30 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
НеофитSQL Удивляюсь, если это не очевидно С учётом того, что ваша терминология зачастую отличается от общепринятой - нет, не очевидно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:36 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
НеофитSQL Задача: выбрать строку по ключу Moe решение: Код: plsql 1. 2. 3.
Кто-то собирается перечислять поля каждый раз, для такой задачи? Что это даст, кроме занятости? С достаточно давних пор: Код: 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.
Что касается "занятости" - повторюсь, генерация списка атрибутов не является проблемой . Зато экономит кучу времени при поддержке кода. Ну и описание структур через тип курсора многократно гибче и удобнее, чем через тип таблицы. В частности, позволяет без проблем проводить через трансформацию как требуемую аналитику, так и обогащение . ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 20:42 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 00:27 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
В статье речь идёт о "*" во внешнем селекте, от которого зависит переданное количество данных. Ещё есть мулька что count(*) медленнее чем count(1), потому что звёздочка :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 01:56 |
|
Получить строку таблицы где 1 значение максимально
|
|||
---|---|---|---|
#18+
НеофитSQL Ещё есть мулька :-) А еще есть плохая память на ники серьёзных экспертов. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 02:17 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1880618]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
143ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 261ms |
0 / 0 |