Набор запросов для разбора инцидентов по гостям, заказам, транзакциям и скидкам. Плейсхолдеры в квадратных скобках ([point_id], [guest_id], [токен]) заменяются на реальные значения.
Находит пары гостей с одинаковым телефоном на указанных поинтах.
SELECT
g1.id AS guest_id_1, g1.name AS guest_name_1, g1.phone, g1.point AS point_1,
g2.id AS guest_id_2, g2.name AS guest_name_2, g2.point AS point_2
FROM cl_guests g1
INNER JOIN cl_guests g2 ON g1.phone = g2.phone AND g1.id < g2.id
WHERE g1.point IN (270600, 880088, 270700)
AND g2.point IN (270600, 880088, 270700)
AND g1.phone IS NOT NULL AND g1.phone != ''
AND g2.phone IS NOT NULL AND g2.phone != ''
ORDER BY g1.phone, g1.id, g2.id;
Помечает записи загрузчика со статусом double для повторной обработки (hard_update).
UPDATE `guests_load_raw_data`
SET `status` = 'hard_update'
WHERE `point` = [point_id] AND `status` = 'double';
Сверяет цену позиции из заказа с ценой в меню лояльности (lmdp). Позиции заказа подставляются во вложенный SELECT ... UNION ALL.
SELECT
op.ext_id, op.name, op.order_price,
lmdp.cost AS db_price, lmdp.type AS price_type,
CASE WHEN op.order_price = lmdp.cost THEN 'Совпадает' ELSE 'НЕ СОВПАДАЕТ' END AS price_match
FROM (
SELECT '78086375-c6f1-40a4-8267-e63c0e1cdfbe' AS ext_id, 'Трепун мосири кокт' AS name, 900.0 AS order_price, 1.0 AS count, 900.0 AS total_cost
UNION ALL SELECT 'ec3bc57b-1ecb-4224-af89-ab2b3cbddc11', 'Россини SAGALIEN', 900.0, 1.0, 900.0
-- добавить остальные позиции
) op
-- + JOIN с таблицами блюд меню
Определяет, к каким категориям относятся блюда заказа (для разбора применения скидок/механик).
WITH order_items AS (
SELECT '5ca7490c-4551-4513-973c-dd6b4ac14e6f' AS product_guid, 'Сет Море Лес' AS dish_name
UNION ALL SELECT 'b2ee0d2c-d41a-4d06-aad3-f2759d835ae6', 'Дары леса'
UNION ALL SELECT '172540a9-4c60-4f07-bc52-fe0178bfbf49', 'Сливочный лимонад'
-- добавить остальные позиции
)
-- + JOIN с таблицами категорий
Сверяет суммарные транзакции лояльности (success) с суммой продаж гостя.
SELECT
lt.guest_id, cg.phone,
SUM(lt.sum) AS total_loyalty_sum,
(SELECT SUM(order_sum) FROM cl_purchases WHERE guest_id = lt.guest_id AND order_type = 'sales') AS total_purchases_sum
FROM loyalty_transactions lt
LEFT JOIN cl_guests cg ON lt.guest_id = cg.id
WHERE lt.status = 'success' AND lt.point = [point_id] AND lt.guest_id IN ([guest_id])
GROUP BY lt.guest_id, cg.phone;
Проверяет наличие, активность и автоматичность скидок по их внешним идентификаторам.
SELECT name, ext_id, is_automatic, is_active
FROM loyalty_discounts
WHERE ext_id IN (
'3877f42f-5a30-4a00-b0d9-77c581345990',
'26385390-c9a5-4c12-877a-0fcec0851be6',
'a9d8888a-eae9-413c-a407-4de91905b99d',
'b5720a43-54d0-415e-a7ea-70096140cf53'
);
Переводит гостей поинта с провайдера iiko на remarked.
UPDATE cl_guests
SET provider = 'remarked'
WHERE provider = 'iiko' AND point = [point_id];
Все транзакции лояльности гостя.
SELECT * FROM loyalty_transactions WHERE guest_id IN ([guest_id]);
Находит запись загрузки по токену транзакции.
SELECT * FROM `guests_load_raw_data` WHERE `transaction_token` = '[токен]';
Выводит пары «приглашённый — пригласивший» по реферальным связям поинта.
SELECT g.id, g.name, g.surname, g.email, g.phone,
rg.id, rg.name, rg.surname, rg.email, rg.phone
FROM cl_guests AS g
RIGHT JOIN cl_guests_referrals AS r ON g.id = r.referral_id
LEFT JOIN cl_guests AS rg ON rg.id = r.referrer_id
WHERE g.point = [point_id];