powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не сложная, но тяжелая задачка с партициями
4 сообщений из 4, страница 1 из 1
Не сложная, но тяжелая задачка с партициями
    #40075847
ab.tmn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость

Всем привет! Кто может подсказать, как посчитать сколько в среднем транзакций делает каждый пользователь в течение 72 часов после первой совершенной транзакции?

То есть тут нужно для начала видимо разбить на партиции относительно user_id

Потом найти в каждой такой партиции самую первую транзакцию (отсортировава по возрастанию поле transaction_ts и взяв первую строку в каждой партиции)

Потом необходимо пробежаться по всей партиции и найти: какие транзации были в интервале от "самая первая транзакция + 1 секунда" до "самая первая транзакция + 72 часа"

Затем в каждой партиции посчитать сколько было таких транзакций

И, наконец, взять из этих двух чисел (так как пользователя всего два в данном примере) среднее

Чисто технически не могу понять как такое реализовать, может быть есть кто знает, как такое можно сделать или может быть вообще есть логика попроще той, что я обозначил. Заранее спасибо 🙏

Если необходимо могу сбросить скрипт для создания и наполнения такой таблицы:
CREATE TABLE Transactions
(
transaction_ts TIMESTAMP,
user_id int,
transaction_id int,
item varchar (30)
);

INSERT INTO Transactions VALUES ('06/18/2010 10:00:00',1, 11, 'oil-1');
INSERT INTO Transactions VALUES ('06/19/2010 10:00:00',1, 12, 'oil-2');
INSERT INTO Transactions VALUES ('06/20/2010 10:00:00',1, 13, 'oil-3');
INSERT INTO Transactions VALUES ('06/21/2010 10:10:00',1, 14, 'oil-4');

INSERT INTO Transactions VALUES ('06/1/2010 10:00:00',2, 21, 'beer-1');
INSERT INTO Transactions VALUES ('06/2/2010 10:00:00',2, 22, 'beer-2');
INSERT INTO Transactions VALUES ('06/2/2010 10:30:00',2, 23, 'beer-3');
INSERT INTO Transactions VALUES ('06/3/2010 10:00:00',2, 24, 'beer-4');
INSERT INTO Transactions VALUES ('06/4/2010 10:10:00',2, 25, 'beer-5');
...
Рейтинг: 0 / 0
Не сложная, но тяжелая задачка с партициями
    #40075868
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Схематично:

Код: sql
1.
2.
3.
4.
5.
SELECT t1.*, SUM(t2.ts <= t1.ts +INTERVAL 72 HOUR) cnt
FROM table t1 
JOIN table t2 USING (userid)
WHERE t2.ts>t1.ts
GROUP BY t2.*



Вместо звёзд подставить список нужных полей.
...
Рейтинг: 0 / 0
Не сложная, но тяжелая задачка с партициями
    #40075877
ab.tmn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

а какие таблицы тут предполагалось соединять с помощью JOIN? По сути все данные лежат в одной таблице
...
Рейтинг: 0 / 0
Не сложная, но тяжелая задачка с партициями
    #40075896
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ab.tmn
а какие таблицы тут предполагалось соединять с помощью JOIN? По сути все данные лежат в одной таблице
Если требуется, таблицу можно джойнить саму к себе, это не запрещено.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не сложная, но тяжелая задачка с партициями
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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