powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird 2.5 запрос MAX с группировкой
48 сообщений из 48, показаны все 2 страниц
Firebird 2.5 запрос MAX с группировкой
    #39598755
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Использую Firebird 2.5. Есть таблица (ID, TIMESTAMP, CLIENT_ID). Нужно выбрать максимальные TIMESTAMP с группировкой по CLIENT_ID. Простой запрос:

select client_id, max(timestamp) from tbl group by client_id

Проблема в том, что судя по анализатору, при выполнении такого запроса просматриваются все записи таблицы. Пробовал создавать различные индексы по client_id, timestamp в разных сочетаниях и сортировках. Подскажите, может как-то переделать этот запрос или еще какой способ..?
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598758
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C при выполнении такого запроса просматриваются все записи таблицы.
А что не так? Вы же ищете максимальные значения из всей таблицы.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598760
Фотография o_v_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кааца, что нужен индекс по убыванию по значениям ID и тайм-штампа
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598762
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
o_v_a,

пробовал, всё равно извлекает все записи
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598767
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

если, например, сделать просто select max(timestamp) from tbl, то потребуется чтение одной записи по индексу timestamp. Хотя максимум по всей таблице
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598773
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C,

Ваши претензии не понятны. У Вас же нет фильтра. Значит все записи просматриваются. И индексы не причём.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598783
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI,

возможно, вы правы. Но может этот запрос записать как-то по-другому?
Вот если я пишу select max(timestamp) from tbl where client_id=1, то он отрабатывает за одно чтение.
Если у меня сто клиентов, то,теоретически, требуется сто чтений.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598788
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C,

и что? 100 это много?
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598796
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr Cвозможно, вы правы. Но может этот запрос записать как-то по-другому?
не "возможно", а он прав. Если вы перебираете все элементы множества, то самым эффективным будет НЕ использование индекса в данном случае. Потому что если сюда присунуть индекс, чтения из него будут лишними.
Индекс имеет смысл только если выбирается часть записей из таблицы.
Соответственно, этот запрос "по другому" в данном случае переписывать нет никакого смысла.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598810
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C Вот если я пишу select max(timestamp) from tbl where client_id=1, то он отрабатывает за одно чтение.
Если у меня сто клиентов, то,теоретически, требуется сто чтений.
Я понял чего вам хочется :)
Мы можете так сделать, но только в случае когда вам точно известно ваше максимальное значение timestamp!
Поставьте на это поле индекс и будет вам счастье.

В вашем примере вы точно знаете какой client_id вам нужен. От этого он и читает только одну запись.
А вот если сделаете
Код: sql
1.
select max(client_id) from tbl


то получите тот же самый full scan table
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598814
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

Хорошо. Согласен. Забудем про этот запрос. Подскажите, как извлечь максимумы timestamp по каждому клиенту? Делать по одному запросу на каждого клиента? Это работает, при этом будет число чтений, соответствующих числу клиентов, что очень даже быстро. Но неужели нельзя сделать эту выборку одним запросом?
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598821
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C Подскажите, как извлечь максимумы timestamp по каждому клиенту?
Если без перебора всех значений, то только научив БД экстрасенсорным способностям.
Не верите?
Попробуйте вытащить из мешка картошки самую тяжелую картофелину без перебора всех остальных.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598823
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C,

какую-то вы фигню пишите про чтения. Давай сюда реальную статистику и план для запроса
Код: sql
1.
select client_id, max(timestamp) from tbl group by client_id
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598825
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008Alexandr C Подскажите, как извлечь максимумы timestamp по каждому клиенту?
Если без перебора всех значений, то только научив БД экстрасенсорным способностям.
Не верите?
Попробуйте вытащить из мешка картошки самую тяжелую картофелину без перебора всех остальных.

Ну, например, select max(timestamp) from tbl выполняется за одно чтение.
Не верите?
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598826
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C,

Попробуйте через вторую таблицу "Клиентов", типа:
Код: sql
1.
2.
3.
4.
5.
6.
select a.id,
         ( select max(timestamp)
           from tbl b
           where b.client_id=a.id
         )
from clients a


Назвать поле "timestamp" тоже сильный ход.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598836
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr CSQL2008пропущено...

Если без перебора всех значений, то только научив БД экстрасенсорным способностям.
Не верите?
Попробуйте вытащить из мешка картошки самую тяжелую картофелину без перебора всех остальных.

Ну, например, select max(timestamp) from tbl выполняется за одно чтение.
Не верите?
Не верю.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598837
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXIAlexandr C,

Попробуйте через вторую таблицу "Клиентов", типа:
Код: sql
1.
2.
3.
4.
5.
6.
select a.id,
         ( select max(timestamp)
           from tbl b
           where b.client_id=a.id
         )
from clients a


Назвать поле "timestamp" тоже сильный ход.

timestamp - это не реальное имя столбца. Просто чтобы понимали, о чем речь.
Спасибо. Сейчас попробую.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598847
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXIAlexandr C,

Попробуйте через вторую таблицу "Клиентов", типа:
Код: sql
1.
2.
3.
4.
5.
6.
select a.id,
         ( select max(timestamp)
           from tbl b
           where b.client_id=a.id
         )
from clients a


Назвать поле "timestamp" тоже сильный ход.

Огромное Вам спасибо! Это то, что нужно!
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598902
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисAlexandr C,

какую-то вы фигню пишите про чтения. Давай сюда реальную статистику и план для запроса
Код: sql
1.
select client_id, max(timestamp) from tbl group by client_id



Прилагаю скриншот. Посмотрите. Может можно с этим что-нибудь сделать.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598909
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C,

а текст скопировать никак? Обязательно надо скриншотами бомбардировать?
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598916
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисAlexandr C,

а текст скопировать никак? Обязательно надо скриншотами бомбардировать?

Извините, я не знал что именно копировать. А исправлять свои сообщения можно? Я бы переделал.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598918
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C,

Если есть время, можно поэкспериментировать так. Поставить явное условие "where", а в нём какую-нибудь фигню типа "client_id=client_id+0". Или всякую другую фигню. Типа планировщик при каком-то условии сменит план. Только принимать мои слова на веру не рекомендую.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598930
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI,

попробовал. всё тоже.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598934
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

не сменит
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598959
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C,

а что не нравится-то? Запрос
select max(tstamp) from tbl group by client_id
имеет план, как видим
PLAN (TBL ORDER TBL_IDX3)

Это значит, что оптимизатор решает встать на индекс TBL_IDX3, ехать по ключам, перебирая все записи (раз условия фильтрации нет), и выдавая клиенту только max(tstamp) значения.
Эффект от плана TABLE ORDER INDEX известен - первые записи выдаются достаточно быстро, а дальше будут прыжки по страницам записей в поисках записей в соответствии с порядком ключей в индексе.
Так что, в том гриде надо бы еще нажать ctrl-end (или FetchAll) для получения верной картины.
Быстрее было бы прибить индекс TBL_IDX3, или написать group by client_id+0, чтобы было PLAN SORT...

http://www.ibase.ru/dataaccesspaths/
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598969
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

Прибил индекс, результат:

Plan
PLAN SORT ((TBL NATURAL))

------ Performance info ------
Prepare time = 16ms
Execute time = 562ms
Avg fetch time = 562.00 ms
Current memory = 35 662 976
Max memory = 57 806 088
Memory buffers = 2 048
Reads from disk to cache = 934
Writes from cache to disk = 0
Fetches from cache = 771 822
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598982
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C,

ну вот. Как видишь быстрее оказалось
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39598998
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

Вот результаты запроса, предложенного KreatorXXI:

Plan
PLAN (B ORDER TBL_IDX2 INDEX (TBL_IDX1))
PLAN (A NATURAL)

------ Performance info ------
Prepare time = 15ms
Execute time = 47ms
Avg fetch time = 15.67 ms
Current memory = 35 781 144
Max memory = 57 806 088
Memory buffers = 2 048
Reads from disk to cache = 30
Writes from cache to disk = 0
Fetches from cache = 506
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599002
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C,

это ты fetchAll не сделал. Запрос KreatorXXI делает совсем дохрена лишнего. Можно считать его вариант извратом :-)
Обрамление внутреннего запроса внешним никогда не даст выигрыша, это нонсенс.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599007
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C,

у вас там что 3 клиента всего?
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599013
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисAlexandr C,

у вас там что 3 клиента всего?


число записей таблицы clients << числа записей таблицы tbl.
Ну это и понятно, одно дело таблица справочника клиентов, а другое, например, записи об их заказах.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599014
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvAlexandr C,

это ты fetchAll не сделал. Запрос KreatorXXI делает совсем дохрена лишнего. Можно считать его вариант извратом :-)
Обрамление внутреннего запроса внешним никогда не даст выигрыша, это нонсенс.

Нет, это был fetchAll
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599054
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

забавно, но это воспроизводится

DDL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
recreate table tbl (
  id int not NULL, 
  client_id int,
  tstamp timestamp,
  constraint pk_tbl primary key(id)
);

create descending index idx_tbl_tstamp on tbl(tstamp);
create index idx_client_id on tbl(client_id);

insert into tbl(id, client_id, tstamp)
with recursive r(i) as (
  select 1 from rdb$database
  union all
  select I+1 from r WHERE i<1000
)
select r1.i + 1000 * (r2.i-1) as id,
       mod(r1.i, 3)+1 as client_id,
       r1.i + cast('01.01.2000' as timestamp) as tstamp
from r r1
CROSS join r r2;

commit;




Код: sql
1.
2.
3.
select client_id, max(tstamp) as tstamp
from tbl
group by client_id



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
План
PLAN (TBL ORDER IDX_CLIENT_ID)

Select Expression
    -> Aggregate
        -> Table "TBL" Access By ID
            -> Index "IDX_CLIENT_ID" Full Scan

------ Информация о производительности ------
Время подготовки запроса = 15ms
Время выполнения запроса = 983ms
Среднее время на получение одной записи = 327,67 ms
Current memory = 283 419 496
Max memory = 396 039 160
Memory buffers = 16 384
Reads from disk to cache = 0
Writes from cache to disk = 0
Чтений из кэша = 2 005 024

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with t(id) as (
  select 1 from rdb$database
  union all
  select 2 from rdb$database
  union all
  select 3 from rdb$database
)
select id, (select max(tstamp) from tbl where tbl.client_id = t.id) as tstamp
from t



Код: plaintext
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.
План
PLAN (TBL ORDER IDX_TBL_TSTAMP INDEX (IDX_CLIENT_ID))
PLAN (T RDB$DATABASE NATURAL, T RDB$DATABASE NATURAL, T RDB$DATABASE NATURAL)

Select Expression
    -> Singularity Check
        -> Aggregate
            -> Filter
                -> Table "TBL" Access By ID
                    -> Index "IDX_TBL_TSTAMP" Full Scan
                        -> Bitmap
                            -> Index "IDX_CLIENT_ID" Range Scan (full match)
Select Expression
    -> Union
        -> Table "RDB$DATABASE" as "T RDB$DATABASE" Full Scan
        -> Table "RDB$DATABASE" as "T RDB$DATABASE" Full Scan
        -> Table "RDB$DATABASE" as "T RDB$DATABASE" Full Scan

------ Информация о производительности ------
Время подготовки запроса = 0ms
Время выполнения запроса = 78ms
Среднее время на получение одной записи = 26,00 ms
Current memory = 283 419 232
Max memory = 396 039 160
Memory buffers = 16 384
Reads from disk to cache = 0
Writes from cache to disk = 0
Чтений из кэша = 522
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599067
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое впечатление, что каждый в этом топике обсуждает что-то своё.
В итоге всё сводится к отличию планов
PLAN (TBL1 ORDER TBL_IDX1)
PLAN (TBL1 ORDER TBL_IDX1 INDEX (TBL_IDX2))

Сейчас ломать голову не буду, но вроде был более простой способ выбрать второй, чем вложенный запрос.
Или даже PLAN (TBL1 ORDER TBL_IDX1 INDEX (TBL_IDX1)) для одного композита.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599079
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

а не хватается композит в group by + max (даже если он DESC)
И +0 для первого запроса не помогает
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599081
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvAlexandr C,

это ты fetchAll не сделал. Запрос KreatorXXI делает совсем дохрена лишнего. Можно считать его вариант извратом :-)
Обрамление внутреннего запроса внешним никогда не даст выигрыша, это нонсенс.
Ага! Как раз такой случай и есть. Через год у него таблица вырастет в сто раз, а Вы будете советовать ради одной записи лопатить запрос по этой выросшей таблице? Агрегаты посоветуйте ещё. В общем, жизнь иногда далека от теории.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599082
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

Вот об этом и речь. Получается простой запрос с группировкой очень неэффективно выполняется.
Мне интересно, это именно ограничение Firebird, или тут проблема в самой постановке задачи.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599113
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C,

расскажи, как же эффективно выполнять "простой запрос с группировкой" ?
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599114
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr C,

это смотря с какой стороны смотреть. Для группировки известны 2 способа: через сортировку (если можно прочесть в порядке индекса ORDER IDX) и HASH GROUP (это в Firebird не реализовано). Это хорошо работает для любой агрегатной функции.

Когда нет группировки, то MIN и MAX при наличии индекса можно вычислить очень быстро. С другими агрегатами это не прокатит, придётся целиком сканировать таблицу.

Придёт dimitr подскажет возможно ли что-то сделать в оптимизаторе
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599128
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисДля группировки известны 2 способаЕсть ещё, но мне интересно что нам расскажет ТС ;)
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599164
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladСимонов ДенисДля группировки известны 2 способаЕсть ещё, но мне интересно что нам расскажет ТС ;)
Согласен с Вами, моими знаниями можно только повеселить знающих предмет обсуждения))
Поэтому и надеюсь на совет уважаемого сообщества
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599169
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIу него таблица вырастет в сто раз, а Вы будете советовать ради одной записи лопатить запрос по этой выросшей таблице? Агрегаты посоветуйте ещё.
и посоветую. Зачем заниматься онанизмом, постоянно перечитывая данные, которые увеличиваются с каждым годом?
Ясен пень, что программист на начальном этапе разработки об этом не думает. Но думать-то надо.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599210
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема "быстрой группировки" состоит только в получении всех client_id.
Если есть отдельная таблица, где client_id уникальны - дальше всё просто. Для каждого client_id получить максимальное время уже не проблема.
И хотя в плане пишется PLAN (TBL1 ORDER TBL_IDX1), на самом деле там ещё и INDEX TBL_IDX1, это не простой обход в порядке индекса.

Кстати, max(tstamp) неправильно, поскольку рано или поздно получим 2 записи.
Правильно писать first 1 tstamp ... order by tstamp desc
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599237
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIЧерез год у него таблица вырастет в сто раз, а Вы будете советовать ради одной записи
лопатить запрос по этой выросшей таблице?

А через два года она вырастет в миллион раз и придёт время задуматься "а нужен ли мне этот
запрос вообще". И таки да, тогда придёт время для хранимых агрегатов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599250
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Не в таком простом случае.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599252
Alexandr C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSeryПроблема "быстрой группировки" состоит только в получении всех client_id.
Если есть отдельная таблица, где client_id уникальны - дальше всё просто. Для каждого client_id получить максимальное время уже не проблема.
И хотя в плане пишется PLAN (TBL1 ORDER TBL_IDX1), на самом деле там ещё и INDEX TBL_IDX1, это не простой обход в порядке индекса.

Кстати, max(tstamp) неправильно, поскольку рано или поздно получим 2 записи.
Правильно писать first 1 tstamp ... order by tstamp desc

Спасибо. Заменил на first 1 tstamp ... order by tstamp desc
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599255
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

В постановке задачи ТС агрегаты не потребуются. Видно, что max отрабатывается нормально. Например, каждый раз сумму считать - это да, согласен, наступит момент. Не надо из пушки по воробьям лупить.
...
Рейтинг: 0 / 0
Firebird 2.5 запрос MAX с группировкой
    #39599256
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandr CСпасибо. Заменил на first 1 tstamp ... order by tstamp desc Хотя это я брежу немного, 2 записи это из другой оперы.
Но всё равно, так тоже правильно.
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird 2.5 запрос MAX с группировкой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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