|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
Ура, впервые удалось спросить что-то по работе! Посоветуйте, пожалуйста, как лучше построить запрос, который не только группирует строки, но также для каждой группы находит актуальную (самую недавнюю). Пример: история цен для разных товаров. Товар определяется двумя колонками (продукт, цвет). В некоторые дни цены обновляются, делая предыдущие неактуальными. Цены не более одного раза в день обновляются. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Нужно вывести прейскурант на сегодня, т.е. показать все товары, и сопутствующие элементы строки: 1, 2.49, 'Apple', 'Red' 1, 5.99, 'Pear', 'Small' 3, 3.69, 'Apple', 'Green' Столько разных способов, не могу выбрать оптимальный. Кроме цены в строке полно столбцов, не хочется повторять аналитическую функцию для каждого. Код: 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.
Второй вроде ничего, учитывая что селф-джойн идет по primary key (day,prod.clr), но наверное кто-то знает еще лучше способ, ведь проблема сгруппировать, а потом выбрать лидера ис каждой группы наверное часто встречается. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 18:31 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 18:47 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
Щукина Анна, кому баян, кому образование. Спасибо за ссылку! Сижу, сравниваю со своими шедеврами. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 18:52 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
Щукина Анна Баян может заиграть новыми мелодиями. Например match_recognize. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 18:56 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
Добавь поле ACTIVE и используй SCD2. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 18:58 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
Еще раз скажу - отличный баян! Я там даже нашел понравившийся мне пример. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
отсюда: 1357243 Но... не работает. Нельзя rowid использовать ни с distinct, ни с group by. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 19:33 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
НеофитSQL Я там даже нашел понравившийся мне пример. Но... не работает. Нельзя rowid использовать ни с distinct, ни с group by. Работать то он работает: Код: 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.
Но искать смысловую нагрузку min(rowid) - типа самая ранняя строка это . SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 20:03 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
в 99% случаев делаю через row_number Код: plsql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 20:08 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
SY, лол, нет конечно не min(rowid). MAX (rowid)! С инлайн вью конечно мне не стоило пытаться использовать rowid, d'oh! Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Собственно, то что я хотел с самого начала, но не получалось написать - забыл что у inline view не бывает rowid. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 20:17 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
andreymx, Тут просто коллекция решений растет. Вот бы кто-то FAQ написал на эту тему.. А есть способ потом крайнюю колонку как-нибудь спрятать или соскрести, не перечисляя все столбцы? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 20:21 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
НеофитSQL А есть способ потом крайнюю колонку как-нибудь спрятать или соскрести, не перечисляя все столбцы? Если версия сервера позволяет, то почему бы и нет? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Проверка на fiddle ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 20:34 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
НеофитSQL лол, нет конечно не min(rowid). MAX (rowid)! Ты так ничего и не понял и как обычно в своем амплуа - кому нужны концепции. Ну нет корреляции между ROWID и временем вставки. MIN(ROWID) и MAX(ROWID) это ни первый ни последний. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 20:35 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
SY, Вообще-то я рассчитывал что клюнет env, но он видать спит. Min/max в этом контексте работает одинаково, и от значений rowid не зависит, они в каждой группе одинаковые. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 21:28 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
НеофитSQL одинаковая долгая писанина Это sql, смирись. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 04:48 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
НеофитSQL, Тебе его не победить. Он хорош, пока задача не вываливается далеко за рамки реляционной алгебры. Всё закончится тем, что ты свалишь писать генераторы sql-лапши на каком-нибудь яп общего назначения. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 06:27 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
НеофитSQL Вообще-то я рассчитывал что клюнет env Клюнет на что? На бред с min/max по rowid, который зависит от фазы Луны, положения Венеры в Тельце, enable row movement и прочих телодвижений с блоками? НеофитSQL они в каждой группе одинаковые Концепции прочтите вы уже... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 09:14 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
НеофитSQL Но... не работает. Нельзя rowid использовать ни с distinct, ни с group by. по одному наймолодшему в отделе Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 10:41 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
Stax НеофитSQL Но... не работает. Нельзя rowid использовать ни с distinct, ни с group by. по одному наймолодшему в отделе Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 11:00 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
andreymx через опу можно сделать многое... но стОит ли? в древних версиях стоило, счас наверное нет я б делал через row_number ...... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 11:07 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
Stax НеофитSQL Но... не работает. Нельзя rowid использовать ни с distinct, ни с group by. по одному наймолодшему в отделе Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
..... stax Станислав, прочтите первое сообщение и предоставленные данные. Вы правильно оперируете с датами, но у автора авторНужно вывести прейскурант на сегодня Что в его понятии сегодня - непонятно ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 14:41 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
K790, В запросах тем не менее у ТС есть поле day. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 15:01 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
env, что это за day, тоже непонятно - ранк? автор???? as LastUpdate, ???? as LastPrice я опирался на этот момент - что этим хотел сказать автор? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 15:19 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
посыпаю голову пеплом, понял. тогда вопрос как построена архитектура? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 15:25 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
извините, что слишком много, но тем не менее, приведенных планов нет и отвечать на вопрос авторне могу выбрать оптимальный не имеет смысла. может там базенка на пару терабайт ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 15:31 |
|
Группировка с нахождением новейших строк.
|
|||
---|---|---|---|
#18+
env НеофитSQL Вообще-то я рассчитывал что клюнет env Клюнет на что? На бред с min/max по rowid, который зависит от фазы Луны, положения Венеры в Тельце, enable row movement и прочих телодвижений с блоками? НеофитSQL они в каждой группе одинаковые Концепции прочтите вы уже... Таки клюнул. Зачем? Уже ж все объяснили. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Вы разберетесь сами на этом примере, почему здесь МАХ не дает максимальную цену, и почему его можно заменить на MIN или AVG? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 17:58 |
|
|
start [/forum/topic.php?fid=52&msg=40025484&tid=1880630]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
83ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 189ms |
0 / 0 |