Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 Следующая запись  [new]
Swv
Member

Откуда:
Сообщений: 187
Здравствуйте.

Имеется таблица. 2 млн записей. PeopleId, date….
Собственно надо для каждой записи по человеку найти следующую.

Сделал подзапросом с first- ушло в кому.

В результате надо посчитать для каждой записи по челу временной интервал до следующей записи


Мож кто что подскажет. Индексы все в наличии

Спасибо
15 ноя 21, 13:29    [22396174]     Ответить | Цитировать Сообщить модератору
 Re: Следующая запись  [new]
m7m
Member

Откуда: Украина, Мариуполь
Сообщений: 1460
Swv,

Покажи запрос и план
15 ноя 21, 13:31    [22396177]     Ответить | Цитировать Сообщить модератору
 Re: Следующая запись  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 11092
Swv,

покажи сам запрос и план. А ещё версию Firebird
15 ноя 21, 13:40    [22396184]     Ответить | Цитировать Сообщить модератору
 Re: Следующая запись  [new]
Swv
Member

Откуда:
Сообщений: 187
select first 100 c, datee,next_date,e_type
,
datediff(minute from cast(datee as date) to cast(next_date as date))  TIMEDIFF
from (
select first 100 site_log_raw.c,site_log_raw.datee, site_log_raw.e_type,
(select first 1 datee  from site_log_raw z where z.orders_all_ext_78_id = site_log_raw.orders_all_ext_78_id and z.datee > site_log_raw.datee )
    next_date
 from site_log_raw
)


индекс по orders_all_ext_78_id,datee

FB 2.5
15 ноя 21, 14:15    [22396204]     Ответить | Цитировать Сообщить модератору
 Re: Следующая запись  [new]
sysdba22
Member

Откуда:
Сообщений: 309
план еще нужен.

скорее всего по дате индекс DESC нужен.
15 ноя 21, 14:18    [22396206]     Ответить | Цитировать Сообщить модератору
 Re: Следующая запись  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54806

Swv
индекс по orders_all_ext_78_id,datee

В подзапрос надо добавить ORDER BY orders_all_ext_78_id,datee. Иначе он не
просто будет медленным, но и вообще вернёт чушь. Проследить, что его план стал
ORDER.
Derived table тут совершенно ни к чему. Особенно с first без order.

Posted via ActualForum NNTP Server 1.5

15 ноя 21, 14:25    [22396207]     Ответить | Цитировать Сообщить модератору
 Re: Следующая запись  [new]
Swv
Member

Откуда:
Сообщений: 187
Dimitry Sibiryakov,

order by добавил.


план такой

Plan
PLAN (Z ORDER SITE_LOG_RAW_IDX9 INDEX (SITE_LOG_RAW_IDX9))
PLAN (SITE_LOG_RAW NATURAL)


первый сто записей выдал через 31 секунду )

индексных чтений 1097376

для первых ста записей подзапрос "перебирает" 128051 записей (это если вместо first count написать - сумма по 100 записям)
15 ноя 21, 15:40    [22396239]     Ответить | Цитировать Сообщить модератору
 Re: Следующая запись  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54806

Swv
план такой

Неправильный план. Тренируйся на кошках пока не научишься добиваться ORDER.

Posted via ActualForum NNTP Server 1.5

15 ноя 21, 15:54    [22396243]     Ответить | Цитировать Сообщить модератору
 Re: Следующая запись  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 1119
Swv,

правильно понимаю - если для конкретного человека 10 записей, то надо выдать 9 интервалов, если 100 записей, то 99 интервалов?
15 ноя 21, 17:03    [22396294]     Ответить | Цитировать Сообщить модератору
 Re: Следующая запись  [new]
Swv
Member

Откуда:
Сообщений: 187
KreatorXXI
Swv,

правильно понимаю - если для конкретного человека 10 записей, то надо выдать 9 интервалов, если 100 записей, то 99 интервалов?


почти. надо на каждую запись выдать или ид или время следующей. последняя запись получается будет с пустым временем следующей записи
16 ноя 21, 09:34    [22396460]     Ответить | Цитировать Сообщить модератору
 Re: Следующая запись  [new]
sysdba22
Member

Откуда:
Сообщений: 309
звучит как задача для рекурсивного CTE
16 ноя 21, 10:05    [22396472]     Ответить | Цитировать Сообщить модератору
 Re: Следующая запись  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30261
sysdba22,

скорее оконные функции.
16 ноя 21, 11:51    [22396515]     Ответить | Цитировать Сообщить модератору
 Re: Следующая запись  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54806

kdv
скорее оконные функции.

Да. Но, учитывая 2.5 и неопытность аффтара - я бы посоветовал ему использовать
PSQL. Там эта задача решается "в лоб".

Posted via ActualForum NNTP Server 1.5

16 ноя 21, 13:47    [22396584]     Ответить | Цитировать Сообщить модератору
 Re: Следующая запись  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 1119
Dimitry Sibiryakov

kdv
скорее оконные функции.

Да. Но, учитывая 2.5 и неопытность аффтара - я бы посоветовал ему использовать
PSQL. Там эта задача решается "в лоб".


+100500. Swv, пиши хранимку. Всё равно просматривать всю таблицу. Пускай цикл в порядке человек-дата-время и считай.
16 ноя 21, 13:52    [22396591]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить