🧠 Oracle SQL — продвинутый приём: `MERGE` вместо `UPDATE` + `INSERT`
Если ты сначала пытаешься обновить строку, а если её нет — вставляешь новую, не пиши две команды. Используй
🔧 Пример:
📌 Что делает:
• Ищет по ключу (`ON`)
• Если запись есть — обновляет
• Если нет — вставляет
• Всё за один проход, без гонок и лишних проверок
⚡ Почему это важно:
• Меньше round-trip'ов между приложением и БД
• Атомарная логика —
• Лучше подходит для ETL, синхронизации, загрузки внешних данных
🧠 Вывод: если пишешь
Пиши
Если ты сначала пытаешься обновить строку, а если её нет — вставляешь новую, не пиши две команды. Используй
MERGE
— это быстрее, чище и атомарно.🔧 Пример:
MERGE INTO employees e
USING (SELECT 101 AS emp_id, 'Alice' AS name FROM dual) src
ON (e.emp_id = src.emp_id)
WHEN MATCHED THEN
UPDATE SET e.name = src.name
WHEN NOT MATCHED THEN
INSERT (emp_id, name)
VALUES (src.emp_id, src.name);
📌 Что делает:
• Ищет по ключу (`ON`)
• Если запись есть — обновляет
• Если нет — вставляет
• Всё за один проход, без гонок и лишних проверок
⚡ Почему это важно:
• Меньше round-trip'ов между приложением и БД
• Атомарная логика —
MERGE
гарантирует целостность • Лучше подходит для ETL, синхронизации, загрузки внешних данных
🧠 Вывод: если пишешь
IF EXISTS THEN UPDATE ELSE INSERT
— ты уже проиграл. Пиши
MERGE
, и база всё сделает за тебя.👍15❤4
🐘 Medoo — минималистичный PHP-фреймворк для работы с базами данных, упакованный в один файл. Этот инструмент особенно понравится тем, кто ценит простоту: подключение к MySQL, PostgreSQL или SQLite требует всего несколько строк кода, а синтаксис напоминает обычный массив PHP.
Несмотря на лёгкость, фреймворк умеет строить сложные запросы, защищает от SQL-инъекций и работает с Laravel, Yii и другими популярными фреймворками. Установка через Composer занимает секунды, а MIT-лицензия позволяет использовать его даже в коммерческих проектах.
🤖 GitHub
@sqlhub
Несмотря на лёгкость, фреймворк умеет строить сложные запросы, защищает от SQL-инъекций и работает с Laravel, Yii и другими популярными фреймворками. Установка через Composer занимает секунды, а MIT-лицензия позволяет использовать его даже в коммерческих проектах.
🤖 GitHub
@sqlhub
👍6🔥3🥰2😁1
Customer Orders — пример схемы базы данных от Oracle
Примерная схема
🔹 Основные особенности:
• Хранение товаров с описанием в JSON
• Учёт заказов, клиентов, магазинов и отправок
• Поддержка офлайн и онлайн-продаж
• Использование современных SQL-возможностей
🔹 Таблицы:
•
•
•
•
•
•
📦 Схема отражает типичный розничный бизнес-процесс и показывает, как можно сочетать структурированные данные и JSON в Oracle DB.
📌 Github
@sqlhub
Примерная схема
Customer Orders (CO)
моделирует систему управления заказами в розничной торговле. Подходит для обучения, тестов и демонстрации возможностей Oracle Database.🔹 Основные особенности:
• Хранение товаров с описанием в JSON
• Учёт заказов, клиентов, магазинов и отправок
• Поддержка офлайн и онлайн-продаж
• Использование современных SQL-возможностей
🔹 Таблицы:
•
products
— товары, цены, JSON-описание и изображения •
customers
— покупатели с ID, именем и email •
orders
— заказы с датой, статусом и привязкой к магазину •
order_items
— позиции в заказе, количество, цена, доставка •
stores
— физические и онлайн-точки продаж •
shipments
— информация об отправке товара📦 Схема отражает типичный розничный бизнес-процесс и показывает, как можно сочетать структурированные данные и JSON в Oracle DB.
📌 Github
@sqlhub
❤6👍4🔥2
🌌 SlateDB — хранилище нового поколения, где облако становится диском. Этот проект переосмысливает классические LSM-движки, перенося данные не на локальный SSD, а прямо в объектные хранилища вроде S3 или MinIO. За счет этого SlateDB предлагает почти безграничную емкость и встроенную репликацию, жертвуя лишь долями секунд задержки.
Разработчики добавили множество полезных фич для борьбы с лаг-проблемами: батчинг записей, кэширование блоков и bloom-фильтры превращают работу с облаком в почти локальный опыт. Интеграция через
🤖 GitHub
@sqlhub
Разработчики добавили множество полезных фич для борьбы с лаг-проблемами: батчинг записей, кэширование блоков и bloom-фильтры превращают работу с облаком в почти локальный опыт. Интеграция через
object_store
позволяет подключать даже кастомные хранилища. 🤖 GitHub
@sqlhub
❤7👍5🔥2👎1
🐳 Oracle Database 23.8 Free: мультиплатформенные контейнеры уже доступны!
Gerald Venzl сообщил, что новые образы Oracle Database 23.8 Free теперь доступны на Docker Hub и GitHub Container Registry:
-
-
💡 Что нового:
✅ Автоплаг PDB:
Если вы заранее подготовили
✅ Новый механизм healthcheck-кодов:
Контейнер теперь возвращает коды от 0 до 5, показывая текущую стадию запуска:
-
-
-
-
-
-
✅ Новые возможности в самой Oracle Database 23.8:
- Поддержка векторных операций и пользовательских функций расстояния
- Расширенная работа с JSON-типами и массивами
- Dynamic Statistics для PL/SQL
- Elastic Vector Memory
- Ограниченное выполнение JavaScript в БД (Restricted Execution Contexts)
📦 Пример запуска:
📌 Подробнее
@sqlhub
Gerald Venzl сообщил, что новые образы Oracle Database 23.8 Free теперь доступны на Docker Hub и GitHub Container Registry:
-
docker.io/gvenzl/oracle-free
-
ghcr.io/gvenzl/oracle-free
💡 Что нового:
✅ Автоплаг PDB:
Если вы заранее подготовили
.pdb`-файлы, просто поместите их в `/pdb-plug
и укажите нужные имена через переменную ORACLE_DATABASE
. Контейнер сам подключит их как полноценные базы, минуя процесс создания с нуля.✅ Новый механизм healthcheck-кодов:
Контейнер теперь возвращает коды от 0 до 5, показывая текущую стадию запуска:
-
0
— база данных полностью готова -
1
— база ещё не готова -
2
— контейнер инициализируется -
3
— происходит подключение/создание PDB -
4
— выполняются init-скрипты -
5
— выполняются пользовательские startup-скрипты ✅ Новые возможности в самой Oracle Database 23.8:
- Поддержка векторных операций и пользовательских функций расстояния
- Расширенная работа с JSON-типами и массивами
- Dynamic Statistics для PL/SQL
- Elastic Vector Memory
- Ограниченное выполнение JavaScript в БД (Restricted Execution Contexts)
📦 Пример запуска:
docker pull gvenzl/oracle-free:23.8-full
docker run --name oracle \
-e ORACLE_DATABASE="mydb" \
-v $(pwd)/mydb.pdb:/pdb-plug/mydb.pdb \
gvenzl/oracle-free:23.8-full
📌 Подробнее
@sqlhub
❤5👍4🔥1
Не уверены, что у вас на сервере Postgres установлен правильный набор расширений?
Удивляетесь, что сервер ваших коллег умеет больше, чем ваш?
Присоединяйтесь к нашему вебинару «Особенности реализации запросов в PostgreSQL» и узнайте, как сделать все правильно!
✅ Практика: Создание собственных решений на основании самых полезных расширений Postgres, которые ставятся на большинство производственных серверов
📌Регистрируйтесь на урок, чтобы сделать ваш сервер Postgres лучше!
https://tglink.io/96dee17b0f8c?erid=2W5zFHPyF52
#реклама
О рекламодателе
Удивляетесь, что сервер ваших коллег умеет больше, чем ваш?
Присоединяйтесь к нашему вебинару «Особенности реализации запросов в PostgreSQL» и узнайте, как сделать все правильно!
✅ Практика: Создание собственных решений на основании самых полезных расширений Postgres, которые ставятся на большинство производственных серверов
📌Регистрируйтесь на урок, чтобы сделать ваш сервер Postgres лучше!
https://tglink.io/96dee17b0f8c?erid=2W5zFHPyF52
#реклама
О рекламодателе
«Идейные победят наёмников» — Альтмана снова качает
Пока Альтман рассказывает сотрудникам OpenAI, что "важны идеи, а не деньги", рынок переманивает его ключевых ресерчеров пачками. Гонка за мозги выглядит всё жёстче — и всё прозрачнее.
🚀 Цукерберг собрал новое AGI-подразделение: 12 человек, многие из которых — бывшие сотрудники OpenAI.
Из них 8 — с азиатскими фамилиями. Совпадение? Вряд ли.
💰 Инсайды про $100M signing bonus пока разнятся: то ли вброс, то ли реальность. Но для контекста:
CEO Apple и Microsoft за 2024 получили меньше $80 млн за весь год.
📊 Конкуренты тоже не дремлют:
- Thinking Machines Миры Мурати — $500K+ в год
- Anthropic — $400K
- OpenAI — $300K, но “с душой”
Вчера Альтман заявил команде, что "идейные победят наёмников". Похоже, он всё ещё не понял, как работает рынок, особенно когда GPU у Су и Хуанга раскупаются быстрее, чем стартапы успевают написать README.
🔥 Сегодняшняя гонка AGI — это не просто про интеллект. Это про то, кто сможет купить больше китайских исследователей, больше графических карт и времени больше не терять.
🐉 Китайцы в Китае уже почти догнали китайцев в США.
@sqlhub
Пока Альтман рассказывает сотрудникам OpenAI, что "важны идеи, а не деньги", рынок переманивает его ключевых ресерчеров пачками. Гонка за мозги выглядит всё жёстче — и всё прозрачнее.
🚀 Цукерберг собрал новое AGI-подразделение: 12 человек, многие из которых — бывшие сотрудники OpenAI.
Из них 8 — с азиатскими фамилиями. Совпадение? Вряд ли.
💰 Инсайды про $100M signing bonus пока разнятся: то ли вброс, то ли реальность. Но для контекста:
CEO Apple и Microsoft за 2024 получили меньше $80 млн за весь год.
📊 Конкуренты тоже не дремлют:
- Thinking Machines Миры Мурати — $500K+ в год
- Anthropic — $400K
- OpenAI — $300K, но “с душой”
Вчера Альтман заявил команде, что "идейные победят наёмников". Похоже, он всё ещё не понял, как работает рынок, особенно когда GPU у Су и Хуанга раскупаются быстрее, чем стартапы успевают написать README.
🔥 Сегодняшняя гонка AGI — это не просто про интеллект. Это про то, кто сможет купить больше китайских исследователей, больше графических карт и времени больше не терять.
🐉 Китайцы в Китае уже почти догнали китайцев в США.
@sqlhub
👍14👎3❤2🔥2
🌺 LotusDB — гибридный key-value движок на Go. Этот проект объединяет лучшее из двух миров — скорость чтения B+-деревьев и эффективность записи LSM-деревьев. Инструмент позиционируется как альтернатива Badger и BBolt, но с меньшими накладными расходами на чтение и дисковое пространство.
Проект поражает простотой интеграции: достаточно импортировать пакет и указать путь для хранения данных. LotusDB активно развивается, а в Slack-чате уже собирается сообщество энтузиастов.
🤖 GitHub
@sqlhub
Проект поражает простотой интеграции: достаточно импортировать пакет и указать путь для хранения данных. LotusDB активно развивается, а в Slack-чате уже собирается сообщество энтузиастов.
🤖 GitHub
@sqlhub
👍4🔥4
⚡️ Почему лучшие разработчики всегда на шаг впереди?
Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.
ИИ: t.iss.one/ai_machinelearning_big_data
Python: t.iss.one/pythonl
Linux: t.iss.one/linuxacademiya
Мл собес t.iss.one/machinelearning_interview
C++ t.iss.one/cpluspluc
Docker: t.iss.one/DevopsDocker
Хакинг: t.iss.one/linuxkalii
МЛ: t.iss.one/machinelearning_ru
Devops: t.iss.one/DevOPSitsec
Data Science: t.iss.one/data_analysis_ml
Javascript: t.iss.one/javascriptv
C#: t.iss.one/csharp_ci
Java: t.iss.one/java_library
Базы данных: t.iss.one/sqlhub
Python собеседования: t.iss.one/python_job_interview
Мобильная разработка: t.iss.one/mobdevelop
Golang: t.iss.one/Golang_google
React: t.iss.one/react_tg
Rust: t.iss.one/rust_code
ИИ: t.iss.one/vistehno
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Frontend: t.iss.one/front
Big Data: t.iss.one/bigdatai
МАТЕМАТИКА: t.iss.one/data_math
Kubernets: t.iss.one/kubernetc
Разработка игр: https://t.iss.one/gamedev
Физика: t.iss.one/fizmat
SQL: t.iss.one/databases_tg
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: t.iss.one/memes_prog
🇬🇧Английский: t.iss.one/english_forprogrammers
🧠ИИ: t.iss.one/vistehno
🖥 Chatgpt для кода в тг: @Chatgpturbobot
📕Ит-книги: https://t.iss.one/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии t.iss.one/addlist/_zyy_jQ_QUsyM2Vi
Подпишись, чтобы всегда знать, куда двигаться дальше!
Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.
ИИ: t.iss.one/ai_machinelearning_big_data
Python: t.iss.one/pythonl
Linux: t.iss.one/linuxacademiya
Мл собес t.iss.one/machinelearning_interview
C++ t.iss.one/cpluspluc
Docker: t.iss.one/DevopsDocker
Хакинг: t.iss.one/linuxkalii
МЛ: t.iss.one/machinelearning_ru
Devops: t.iss.one/DevOPSitsec
Data Science: t.iss.one/data_analysis_ml
Javascript: t.iss.one/javascriptv
C#: t.iss.one/csharp_ci
Java: t.iss.one/java_library
Базы данных: t.iss.one/sqlhub
Python собеседования: t.iss.one/python_job_interview
Мобильная разработка: t.iss.one/mobdevelop
Golang: t.iss.one/Golang_google
React: t.iss.one/react_tg
Rust: t.iss.one/rust_code
ИИ: t.iss.one/vistehno
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Frontend: t.iss.one/front
Big Data: t.iss.one/bigdatai
МАТЕМАТИКА: t.iss.one/data_math
Kubernets: t.iss.one/kubernetc
Разработка игр: https://t.iss.one/gamedev
Физика: t.iss.one/fizmat
SQL: t.iss.one/databases_tg
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: t.iss.one/memes_prog
🇬🇧Английский: t.iss.one/english_forprogrammers
🧠ИИ: t.iss.one/vistehno
📕Ит-книги: https://t.iss.one/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии t.iss.one/addlist/_zyy_jQ_QUsyM2Vi
Подпишись, чтобы всегда знать, куда двигаться дальше!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3
🍉 WatermelonDB — гибкая база данных для React. Эта СУБД предлагает необычный подход к работе с данными в React-приложениях. Вместо загрузки всей информации при старте, она подгружает только то, что действительно нужно пользователю прямо сейчас.
Инструмент обладает гибридной архитектурой: SQLite на низком уровне обеспечивает надежность, а прослойка на React автоматически обновляет интерфейс при изменениях. Например, новое сообщение в чате мгновенно появится во всех открытых списках без ручного обновления.
🤖 GitHub
@sqlhub
Инструмент обладает гибридной архитектурой: SQLite на низком уровне обеспечивает надежность, а прослойка на React автоматически обновляет интерфейс при изменениях. Например, новое сообщение в чате мгновенно появится во всех открытых списках без ручного обновления.
🤖 GitHub
@sqlhub
👍7❤5🤬3👎2🥰1
Forwarded from Machinelearning
Он выступает прослойкой между вашим агентом (например, LangChain, LlamaIndex, VertexAI) и базой данных, упрощая работу с базой, подключение, управление, безопасность и мониторинг.,
Подходит для разработки AI-агентов, которые могут создавать и управлять в реальными БД.
Особенности:
Если делаете агентов, которые работают с
SQL/PostgreSQL/MySQL
— точно стоит попробовать.▪ GitHub: https://github.com/googleapis/genai-toolbox
@ai_machinelearning_big_data
#AI #ML #aiagent #opensource #MCP #databases #genai
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥6👍4
🧠 Хитрая SQL-задача с подвохом: «Найди самого преданного клиента»
У тебя есть таблица
Задача: Найти user_id пользователя, который совершал покупки в каждый календарный месяц хотя бы один раз за последние 2 года.
Но есть подвох:
пользователь должен был купить в каждый месяц (например, март 2024, апрель 2024, ..., июль 2025 — всего 24 месяца)
пропуски даже в одном месяце — дисквалификация
использовать GROUP BY, FILTER, GENERATE_SERIES, LEFT JOIN и другие техники разрешено
📌 Подумай:
- как сгенерировать список всех нужных месяцев?
- как сопоставить их с месяцами, в которых были покупки у каждого пользователя?
- как убедиться, что пользователь не пропустил ни одного?
🧩 Подсказка: решение можно построить с generate_series() по месяцам и LEFT JOIN к сгруппированным user_id + month.
@sqlhub
У тебя есть таблица
purchases
со следующей структурой:
purchases (
id SERIAL PRIMARY KEY,
user_id INT,
item_id INT,
amount DECIMAL,
purchase_date DATE
)
Задача: Найти user_id пользователя, который совершал покупки в каждый календарный месяц хотя бы один раз за последние 2 года.
Но есть подвох:
пользователь должен был купить в каждый месяц (например, март 2024, апрель 2024, ..., июль 2025 — всего 24 месяца)
пропуски даже в одном месяце — дисквалификация
использовать GROUP BY, FILTER, GENERATE_SERIES, LEFT JOIN и другие техники разрешено
📌 Подумай:
- как сгенерировать список всех нужных месяцев?
- как сопоставить их с месяцами, в которых были покупки у каждого пользователя?
- как убедиться, что пользователь не пропустил ни одного?
🧩 Подсказка: решение можно построить с generate_series() по месяцам и LEFT JOIN к сгруппированным user_id + month.
@sqlhub
🔥7👍6❤5
Forwarded from Machinelearning
Reachy Mini — это выразительный и полностью open-source робот, созданный для взаимодействия с человеком, коммуникации и экспериментов с ИИ.
- Все ПО открыто и написано на Python, а скоро будет достнуо — и на JavaScript и Scratch
- Базовая версия стоит $299, еще доступна wireless-версия за $449
- Открытая архитектура и SDK — идеален для экспериментов с LLM, аудио- и визуальными агентами
С ним можно разрабатывать, тестировать, запускать и делиться реальными ИИ-приложениями — на базе современных LLM-моделей.
Технические характеристики
- Высота: 28 см, в режиме сна — 23 см
- Ширина: 16 см, вес: 1.5 кг
- Поставляется в виде конструктора:
- Lite-версия — базовый функционал
- Полноценная версия — автономная версия с Raspberry 5 внутри, встроенным питанием, Wi‑Fi, микрофонами и камерой
🎤 Датчики и интерфейсы
- Микрофоны: Lite — 2, Wireless — 4 встроенных микрофонов
hyper.ai
- Камера: широкоугольная фронтальная камера (в wireless-версии)
- Акселерометр: встроен в Wireless-версию
🔗 Подробнее: https://hf.co/blog/reachy-mini
@ai_machinelearning_big_data
#huggingface #Reachy #opensource #Python
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥4👍1
🌊 OceanBase — распределённая СУБД от Ant Group с поддержкой векторного поиска. Это необычная opensource-база данных, сочетающая реляционную модель с возможностями векторного поиска для AI-сценариев. Изначально создавалась для обработки финансовых транзакций Alibaba, но теперь доступна всем.
OceanBase имеет архитектуру на основе Paxos-протокола, обеспечивающая нулевую потерю данных (RPO=0) и восстановление за 8 секунд. Опробовать её можно в Docker или развернуть кластер в Kubernetes через ob-operator.
🤖 GitHub
@sqlhub
OceanBase имеет архитектуру на основе Paxos-протокола, обеспечивающая нулевую потерю данных (RPO=0) и восстановление за 8 секунд. Опробовать её можно в Docker или развернуть кластер в Kubernetes через ob-operator.
🤖 GitHub
@sqlhub
❤8🔥4🥰1😱1
⚡Крутейший релиз от Anthropic — парни выпустили собственные бесплатные курсы!
Вы нижете десятки лекций, тесты и даже сертификаты по различным темам: от Anthropic API до MCP и лучших практик Claude Code. Всё с реальными примерами от разработчиков.
Забираем здесь.
Вы нижете десятки лекций, тесты и даже сертификаты по различным темам: от Anthropic API до MCP и лучших практик Claude Code. Всё с реальными примерами от разработчиков.
Забираем здесь.
👍8❤4🔥3🥰1
Как начать в Data Science, когда все вокруг уже сеньоры?
В Вышке открыт набор на онлайн-магистратуру «Магистр по наукам о данных». Поступить можно даже без технического бэкграунда, а учиться — в удобном формате.
Уже сейчас идет марафон подготовки к вступительным испытаниям, после которого вы сможете успешно поступить на программу.
За 4 встречи вы
— Разберетесь в математике
— Попрактикуетесь на задачах вступительных испытаний
— Познакомитесь с преподавателями и магистратурой
— Получите доступ в чат комьюнити
Когда: 9-14 июля, 18:00 (МСК)
Где: онлайн
📎 Зарегистрироваться и начать карьеру в DS
В Вышке открыт набор на онлайн-магистратуру «Магистр по наукам о данных». Поступить можно даже без технического бэкграунда, а учиться — в удобном формате.
Уже сейчас идет марафон подготовки к вступительным испытаниям, после которого вы сможете успешно поступить на программу.
За 4 встречи вы
— Разберетесь в математике
— Попрактикуетесь на задачах вступительных испытаний
— Познакомитесь с преподавателями и магистратурой
— Получите доступ в чат комьюнити
Когда: 9-14 июля, 18:00 (МСК)
Где: онлайн
📎 Зарегистрироваться и начать карьеру в DS
❤3🔥1
🧠 Хитрая SQL-задача: вторая покупка в течение 7 дней
У вас есть таблица
Задача:
Найти всех клиентов, у которых вторая покупка произошла не позднее, чем через 7 дней после первой.
Показать:
-
-
-
✅ Решение:
🔍 Пояснение:
-
- Мы соединяем первую и вторую покупки клиента через self-join.
- В финальном
⚠️ Важно:
- Клиенты с одной покупкой отфильтруются (у них нет второй).
- Сравнение выполняется через
- Это не поиск любых двух покупок в пределах 7 дней, а именно проверка интервала между первой и второй.
@sqlhub
У вас есть таблица
purchases
:
purchases (
id SERIAL PRIMARY KEY,
customer_id INT,
purchase_date DATE,
amount NUMERIC
)
Задача:
Найти всех клиентов, у которых вторая покупка произошла не позднее, чем через 7 дней после первой.
Показать:
-
customer_id
-
first_purchase_date
-
second_purchase_date
✅ Решение:
WITH ordered_purchases AS (
SELECT
customer_id,
purchase_date,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY purchase_date) AS rn
FROM purchases
),
first_second_purchases AS (
SELECT
p1.customer_id,
p1.purchase_date AS first_purchase_date,
p2.purchase_date AS second_purchase_date
FROM ordered_purchases p1
JOIN ordered_purchases p2
ON p1.customer_id = p2.customer_id
AND p1.rn = 1
AND p2.rn = 2
)
SELECT *
FROM first_second_purchases
WHERE second_purchase_date <= first_purchase_date + INTERVAL '7 days';
🔍 Пояснение:
-
ROW_NUMBER()
присваивает каждой покупке номер в пределах одного клиента.- Мы соединяем первую и вторую покупки клиента через self-join.
- В финальном
SELECT
фильтруем только те пары, где разница между датами ≤ 7 дней.⚠️ Важно:
- Клиенты с одной покупкой отфильтруются (у них нет второй).
- Сравнение выполняется через
INTERVAL '7 days'
, чтобы корректно обрабатывать даты.- Это не поиск любых двух покупок в пределах 7 дней, а именно проверка интервала между первой и второй.
@sqlhub
👍23❤7🥰1
🧠 Хитрая SQL-задача: вторая покупка в течение 7 дней
У вас есть таблица
Задача:
Найти всех клиентов, у которых вторая покупка произошла не позднее, чем через 7 дней после первой.
Показать:
-
-
-
✅ Решение:
🔍 Пояснение:
-
- Через self-join соединяем первую и вторую покупку клиента.
- Далее фильтруем, оставляя только те, у кого вторая покупка была не позднее 7 дней после первой.
⚠️ Важно:
- Клиенты с одной покупкой исключаются — у них нет второй.
- Мы не ищем любые две покупки в пределах 7 дней, а только первую и вторую по порядку.
-
@sqlhub
У вас есть таблица
purchases
:
purchases (
id SERIAL PRIMARY KEY,
customer_id INT,
purchase_date DATE,
amount NUMERIC
)
Задача:
Найти всех клиентов, у которых вторая покупка произошла не позднее, чем через 7 дней после первой.
Показать:
-
customer_id
-
first_purchase_date
-
second_purchase_date
✅ Решение:
WITH ordered_purchases AS (
SELECT
customer_id,
purchase_date,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY purchase_date) AS rn
FROM purchases
),
first_second_purchases AS (
SELECT
p1.customer_id,
p1.purchase_date AS first_purchase_date,
p2.purchase_date AS second_purchase_date
FROM ordered_purchases p1
JOIN ordered_purchases p2
ON p1.customer_id = p2.customer_id
AND p1.rn = 1
AND p2.rn = 2
)
SELECT *
FROM first_second_purchases
WHERE second_purchase_date <= first_purchase_date + INTERVAL '7 days';
🔍 Пояснение:
-
ROW_NUMBER()
присваивает каждой покупке порядковый номер в рамках клиента.- Через self-join соединяем первую и вторую покупку клиента.
- Далее фильтруем, оставляя только те, у кого вторая покупка была не позднее 7 дней после первой.
⚠️ Важно:
- Клиенты с одной покупкой исключаются — у них нет второй.
- Мы не ищем любые две покупки в пределах 7 дней, а только первую и вторую по порядку.
-
INTERVAL '7 days'
обеспечивает корректное сравнение дат.@sqlhub
❤7👍1🔥1