А ещё такой вопрос. У меня есть база со статистикой

звонков на 20 млн записей. И мне нужно в неё добавить 1 поле new_customer и пробежаться по всей базе и заполнить это поле исходя из условия:
беру datetime записи, и если этот кастомер звонил за последние 3 месяца то надо прописать 0, если он звонил более чем 3 месяца то 2, а если ни разу не звонил (1 звонок) то 1.
Я попытался сделать что то типа этого:
UPDATE calls a1
SET new_customer = CASE
WHEN EXISTS (
SELECT 1
FROM calls a2
WHERE a2.hashed_phone = a1.hashed_phone
AND a2.call_start < a1.call_datetime AND a2.call_start > (a1.call_datetime - INTERVAL 3 MONTH)
) THEN 0
WHEN EXISTS (
SELECT 1
FROM calls a3
WHERE a3.hashed_phone = a1.hashed_phone
AND a3.call_start < a1.call_datetime
) THEN 2
ELSE 1
END;
Пробовал ставить с ограничением на маленький диапазон и это очень долго выполнялось. По всей базе прям нереально долго бы было.
Может я что то туплю и какой то более очевидный способ не вижу без использования подзапросов?))

15 ответов

64 просмотра

>добавлять столбец в бд с 20 млн записей

Надо НЕ В ЭТУ таблицу это поле добавлять. В таблицу заказчиков.

Art- Автор вопроса
Vladislav Sh.
>добавлять столбец в бд с 20 млн записей

Ну там за несколько лет накопилось)

Art
Ну там за несколько лет накопилось)

А вы ещё и логически хотите заполнить новое поле. Тут на полдня спокойно крутиться может

Art- Автор вопроса
Ilya Zviagin
Надо НЕ В ЭТУ таблицу это поле добавлять. В таблиц...

это поле нужно чтобы отслеживать новых и вернувшихся клиентов.

Art
это поле нужно чтобы отслеживать новых и вернувших...

надо БД нормализовывать, слегка легче будет

использование подзапросов тут ничего не меняет

Давай лучше вернёмся к печке... У тебя под этот запрос индексы есть ?

Art- Автор вопроса
Ilya Zviagin
Давай лучше вернёмся к печке... У тебя под этот за...

все поля нужные с индексами (дата и хэш клиента)

Ilya Zviagin
Ну ?

нужно понять тип индексов

А почему никто не обратил внимание, что значения в этом новом поле могут стать неактуальными на следующий день. Какой вообще смысл именно заполнять поле? Не проще ли просто функцию написать и ее использовать при определении вида клиента в момент звонка оператору?

Maksim
А почему никто не обратил внимание, что значения в...

Нужно значение на момент совершения строки, все норм, я обращал внимание

Maksim
А почему никто не обратил внимание, что значения в...

Там аналитики скорее всего собираются искать корреляции между проводимыми акциями и числом возвратунов за временной период этой акции

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта