С помощью оконных функций SQL можно находить разрывы во временных рядах, пропущенные интервалы и повторяющиеся записи.
Сегодня в гайде:
• Выявляем пропущенные минуты и события;
• Находим дубликаты временных меток;
• Контролируем качество потоков и ETL прямо в запросах.
В продакшн-аналитике важно не только считать, но и замечать, где данные пропали или задублировались.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥12🤝6
Оптимистическая блокировка: обновляем данные без конфликтов!
Когда несколько пользователей редактируют одну запись, можно избежать конфликтов с помощью оптимистической блокировки — без явного
Создаём таблицу с версией записи:
Выбираем запись для редактирования:
Обновляем с проверкой версии:
Если другой пользователь уже изменил эту строку,
Приложение должно проверить, что
Проверяем результат:
🔥 Такой подход предотвращает «потерю обновлений» без длительных блокировок чтения и подходит для большинства современных СУБД.
➡️ SQL Ready | #практика
Когда несколько пользователей редактируют одну запись, можно избежать конфликтов с помощью оптимистической блокировки — без явного
FOR UPDATE.Создаём таблицу с версией записи:
CREATE TABLE products (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name TEXT,
price DECIMAL(10,2),
version INT DEFAULT 1 NOT NULL
);
Выбираем запись для редактирования:
SELECT id, name, price, version
FROM products
WHERE id = 1;
Обновляем с проверкой версии:
UPDATE products
SET price = 199.99,
version = version + 1
WHERE id = 1
AND version = 1;
Если другой пользователь уже изменил эту строку,
UPDATE не затронет ни одной записи — значит, версия изменилась, и данные устарели.Приложение должно проверить, что
rows_affected = 1, и при необходимости повторить попытку или показать сообщение об ошибке.Проверяем результат:
SELECT * FROM products WHERE id = 1;
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤10🔥5🤝1
Сегодня соберём 28 уникальных костяшек домино — только силами SQL. Без циклов и хранимых процедур, используя лишь
CROSS JOIN и простое условие.В этом посте:
• Генерируем все пары чисел от 0 до 6;
• Фильтруем зеркальные комбинации;
• Получаем финальный набор костяшек в правильном порядке.
Такой приём пригодится не только для домино — он полезен в задачах комбинаторики, генерации тестовых данных и построения матриц связей.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥8❤7🤝2
Нужно найти, где бронирования, подписки или сессии пересекаются по времени?
Два интервала пересекаются, если начало одного раньше конца другого, и наоборот:
Это условие покрывает все случаи перекрытий, даже частичных и вложенных.
Теперь объедини данные сами с собой:
Хочешь анализировать бронирования по ресурсу? Добавь фильтр:
🔥 Теперь видно, какие заявки реально конфликтуют по времени.
➡️ SQL Ready | #совет
Два интервала пересекаются, если начало одного раньше конца другого, и наоборот:
a.start_at < b.end_at
AND b.start_at < a.end_at
Это условие покрывает все случаи перекрытий, даже частичных и вложенных.
Теперь объедини данные сами с собой:
SELECT a.id, b.id
FROM bookings a
JOIN bookings b
ON a.id < b.id
AND a.start_at < b.end_at
AND b.start_at < a.end_at;
a.id < b.id, чтобы не получить пары в обе стороны.Хочешь анализировать бронирования по ресурсу? Добавь фильтр:
AND a.room_id = b.room_id
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤11👍6🤝1
Эта шпаргалка собирает основные псевдоколонки Oracle и показывает, как использовать их на практике: нумерация строк, доступ к физическому адресу, работа с иерархиями, определение листовых/корневых узлов, генерация UUID, отслеживание изменений по SCN и просмотр историй строк. Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥10❤7🤝2
SKIP LOCKED позволяет управлять конкурентным доступом на уровне строки, а не всей таблицы, поэтому воркеры не ждут друг друга и не создают лишних блокировок.Сегодня в гайде:
• Забираем задачи параллельно и без конфликтов;
• Делаем атомарный “взять + обновить” в одном запросе;
• Распределяем очереди между воркерами под высокой нагрузкой.
Этот прием делает обработку задач масштабируемой даже при высоком параллелизме.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤11👍6🤝1