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

звонков на 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 ответов

21 просмотр

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ilya Zviagin
Ну ?

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

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

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

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

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

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

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

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

Всем привет, Добавил в плагин определение user agent public function registerMarkupTags() { return [ 'filters' => [ 'staticPage' => ['RainLab\Pages\Cl...
John Norton Kruger
3
Я колись ставив гуглу антиспам 3.0, може і норм, але мені не дуже зайшло. Теж думав тиждень, що його і куди. Зупинився на трех варіантах відразу всі три і включив 1. Перевір...
𝓔𝓾𝓰𝓮𝓷𝓮𝓥 J
2
Всем привет, может кто знает нормальных иностранных хостинг провайдеров. Что бы по качеству аналогичные netangels, beget, timeweb?
Black Cat
4
Второй вопрос: снимаются ли эти ограничения при покупке на fragment хрени за кучу денег? (до 4096 / 2048)
Артем Уколов
3
Добрый день , слышали про то что XML схемы https://schemas.xmlsoap.org/soap/envelope/ перестали работать со поза-вчера. А домен https://schemas.xmlsoap.org/ , отвечает 404 оши...
Max Dubovsky
3
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
где собака, админ группы? нычкуется и боится проявить волю, в толерантность еще не наигрался? @yelizariev
Ognezar
61
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
Приветствую всех, есть вопросик. Передали проект на OctoberCms, без инсталяшки в полуразвернутом виде, нужно было залить бекап бд, после залития бд, оказалось, что части строк...
Лео
14
Приветствую всех, возникла проблема, до этого писал бота в простом формате где при выполнении условий приходило через send_message информация, сейчас решил добавить хендлер на...
Andrew
4
Карта сайта