powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Есть ли такой функционал в АСА?
11 сообщений из 11, страница 1 из 1
Есть ли такой функционал в АСА?
    #36500974
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Часто возникает потребность сделать выборку, смысл которой вывести первые записи из некой группы и значение одного поля для максимального/минимального значения другого поля внтури этой группы.
Т.е. например, есть записи:
abc310910714120103531969853712196985152049761220497622
А в результате нужно получить все записи сгруппированные по b, и вывести такое a, для которого c будет максимальным внутри группы по b:
xy3109107412010331969852204976
В АСА есть замечательные OLAP функции. Так и хочется написать:
Код: plaintext
1.
2.
select first(a) over (partiotion by b order by c desc) as x,b as y
from t
where x=a

Но насколько я знаю, агрегатной функции first() в АСА-9 нет?! Но ее так иногда не хватает. sum,max,min - ну почему бы не сделать еще какие-нибудь first и last...

P.S. крик души, так сказать.
...
Рейтинг: 0 / 0
Есть ли такой функционал в АСА?
    #36501082
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо кричать душой, лучше сначала попытайтесь объяснить себе и нам, что означает first, особенно в терминах агрегатных функций, да еще и без сортировки.
В ASA есть FIRST, но это не агрегатная функция. Может в подзапросе выбрать искомое?
...
Рейтинг: 0 / 0
Есть ли такой функционал в АСА?
    #36501146
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос конечно отстой, но на ваших данных работает.
SELECT b, a FROM iller i
where c=(select max(i2.c) from iller i2 where i2.b=i.b)

P.S. Я бы для себя разбил на два запроса с временной таблицей, на столько не люблю вложенные запросы.
...
Рейтинг: 0 / 0
Есть ли такой функционал в АСА?
    #36501160
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
first(a) over (partition by b order by c desc) - это есть оконная OLAP-функция, которая берет блок с одинаковыми значениями b, затем внутри его сортирует записи по убыванию c, а first возьмет первое значение из поля "a" в этом окне. Это я мечтаю, чтобы такое было.)))

В том-то и дело, что в лоб задача решается либо с подзапросами, либо с inner join. Но по сути-то, over тем и хорош, что табличка сканируется только один раз, нет никаких подзапросов и соединений с временными массивами.
Производительность операций реализованных на более низком уровне всегда выше на порядки, чем реалзованных на высшем уровне. И ведь постоянно на форуме всплывают задачки аналогичная моей, выбрать записи соответствующие макс/мин значению из соседнего поля в пределах какой-то группы.

А если кинуть на форуме пожеланий на sybase.com, есть вероятность что на АСА9 реализуют, или если и услышат, то сделают только в АСА11/12/13?
...
Рейтинг: 0 / 0
Есть ли такой функционал в АСА?
    #36501205
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дявятку сняли с поддержки уже, так что добавлять фичи точно не будут.
...
Рейтинг: 0 / 0
Есть ли такой функционал в АСА?
    #36501609
Andreas_84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_oldЗапрос конечно отстой, но на ваших данных работает.
SELECT b, a FROM iller i
where c=(select max(i2.c) from iller i2 where i2.b=i.b)

P.S. Я бы для себя разбил на два запроса с временной таблицей, на столько не люблю вложенные запросы.


И мой отстойчик работает!!)))

Код: plaintext
1.
2.
3.
SELECT qq1.a as x,qq1.b as y
 FROM "DBA"."qq" qq1 ,
      (select b,max(c) as mc from qq   group by b ) as qq2
 where qq1.c =qq2.mc and qq1.b=qq2.b 

Модератор: Не стесняйтесь резать длинные запросы на несколько строк. Их и читать удобнее будет и экран не надо будет горизонтально прокручивать.
Не забывайте про кнопку "Предварительный просмотр"
...
Рейтинг: 0 / 0
Есть ли такой функционал в АСА?
    #36504302
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer wrote:

> Но насколько я знаю, агрегатной функции first() в АСА-9 нет?! Но ее так
> иногда не хватает. sum,max,min - ну почему бы не сделать еще
> какие-нибудь first и last...
>
> P.S. крик души, так сказать.

Как бы реляционные БД не ориентированы на последовательную обработку
данных. Они ориентированы на обработку множеств.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Есть ли такой функционал в АСА?
    #36504600
Andreas_84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
iLLer wrote:

> Но насколько я знаю, агрегатной функции first() в АСА-9 нет?! Но ее так
> иногда не хватает. sum,max,min - ну почему бы не сделать еще
> какие-нибудь first и last...
>
> P.S. крик души, так сказать.

Как бы реляционные БД не ориентированы на последовательную обработку
данных. Они ориентированы на обработку множеств.


+ помоему можно поиграться с TOP N c соответствующей сортировкой( с ASC -получится first ,а с DESC получится last)

или я не так понял суть нехватки FIRST и LAST ))?
...
Рейтинг: 0 / 0
Есть ли такой функционал в АСА?
    #36504645
L.M.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASA 11:

FIRST_VALUE function Returns values from the first row of a window. This function requires a window specification.

LAST_VALUE function Returns values from the last row of a window. This function requires a window specification.
...
Рейтинг: 0 / 0
Есть ли такой функционал в АСА?
    #36505744
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
iLLer wrote:

> Но насколько я знаю, агрегатной функции first() в АСА-9 нет?! Но ее так
> иногда не хватает. sum,max,min - ну почему бы не сделать еще
> какие-нибудь first и last...
>
> P.S. крик души, так сказать.

Как бы реляционные БД не ориентированы на последовательную обработку
данных. Они ориентированы на обработку множеств.

А чем требуемый результат в моем примере не множество? Причем алгоритм обработки не подразумевает той последовательности , о которой Вы говорите. Ведь результат можно достичь запросом с подзапросом?! Каким путем идти при обработке - это дело нутра сервера, а как это выглядит синтаксически - это дело вообще десятое, самое главное суть.
Ведь FIRST и TOP N не вызывают таких вопросов?!
...
Рейтинг: 0 / 0
Есть ли такой функционал в АСА?
    #36505748
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L.M.ASA 11:

FIRST_VALUE function Returns values from the first row of a window. This function requires a window specification.

LAST_VALUE function Returns values from the last row of a window. This function requires a window specification.
Во-во, это то, что надо! Жаль в 9-ке нет. Еще один повод для апгрейда.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Есть ли такой функционал в АСА?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]