Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.236.86.184] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Здравствуйте.
Для продажи товаров на маркетплейсе нужно рассчитать для заказов цикла сделки (в днях). Началом сделки считаю день закупки товара для заказа, окончанием перечислением денег за заказ на расчётный счет от маркетплейса. Вопрос 1. Подскажите нужно ли для этого создавать PHP скрипт (т.к. стек на PHP) или можно решить задачу только SQL запросом? Вопрос 2. При расчете как учитывать "вторник, четверг, выходной, праздничный"? Надо ли для этого создавать отдельную таблицу в БД с перечислением всех эти дней в году (чтобы их учитывал скрипт /sql запрос)? Условия: 1. Выплаты производятся в дни месяца 4, 12, 20, 28. 2. Если товары выкуплены до даты выплаты, то деньги будут перечислен в ближайшую дату выплаты. 3. Если заказ перешёл в статус «Доставлен» за 1 день до выплаты, то выплата перенесётся уже на следующий раз. К примеру, заказ был доставлен покупателю 3-го числа, выплата за него будет не 4-го, а уже 12-го 4. Если дата выплаты выпадает на вторник, четверг, выходной, праздничный, то переносится на следующий за ним рабочий день. Таблицы - "4_1_orders_yandex_market" (Заказы) > order_number (Номер Заказа) - "4_3_status_yandex_market" (Статусы) > "number_order_yandex_market" (Номер Заказа) > "status" (Статус) > "data_time" (Дата-время наступления статуса) - "11_2_shipments_yandex_market" (Отгрузки) > "number_shipment" (№ Отгрузки) > "start_plan_interval_shipments" (дата Отгрузки) - "11_3_orders_yandex_market_from_shipments" (Заказы из Отгрузок) > "number_shipment" (№ Отгрузки) > "number_order_yandex_market" (Номер заказа) SQL запрос 1. Выбрать из таблицы "4_1_orders_yandex_market" Заказы для которых в таблице "4_3_status_yandex_market" отсутствует статус="CANCELLED" и присутствует статус="DELIVERED" 2. Вывести столбцы - Номер заказа - Дата закупки товара * В таблице "11_3_orders_yandex_market_from_shipments" найти (Отгрузки Яндекс.Маркет) Заказ и в таблице "11_2_shipments_yandex_market" (Отгрузки Яндекс.Маркет) для него проверить поле start_plan_interval_shipments (дата Отгрузки), из этой даты вычесть 1 день. - Дата вручения * В таблице "4_3_status_yandex_market" (Статусы) статус "status" (Статус)= "DELIVERED", поле "data_time". - Дата выплаты плановая. * Ближайшая дата выплаты относительно "Дата вручения" - Дата выплаты итоговая * Ближайшая дата выплаты с соблюдением всех условий из раздела " Условия". - Цикл сделки (дн) (Дата выплаты итоговая) – (Дата закупки товара) Цитата Примеры. Пример 1. Обычный. - Дата закупка товара: 01.12.2023 - Дата вручения товара: 02.12.2023 - Условия: "1.", "2." => ближайшая дата выплаты 04.12.2023 "3." => выкуплен раньше, чем 1 день до 04.12.2023 "4." => дата выплаты (04.12.2023) НЕ вторник, четверг, выходной/праздничный день - Дата выплаты итоговая: 04.12.2023 - Цикл сделки: (04.12.2023) – (01.12.2023) = 3дн [U]Пример 2. День выплаты вторник. [/U] - Дата закупка товара: 01.12.2023 - Дата вручения товара: 11.12.2023 - Условия: "1.", "2." => ближайшая дата выплаты 12.12.2023 "3." => выкуплен за 1 день до 12.12.2023 => перенос на 20.12.2023 "4." => дата выплаты (20.12.2023) НЕ вторник, четверг, выходной/праздничный день - Дата выплаты итоговая: 20.12.2023 - Цикл сделки: (20.12.2023) – (01.12.2023) = 19дн Пример 3. День выплаты выходной. - Дата закупка товара: 01.11.2023 - Дата вручения товара: 02.11.2023 - Условия: "1.", "2." => ближайшая дата выплаты 04.11.2023 (суббота) переносится на рабочий день 06.11.2023 (понедельник) "3." => выкуплен раньше, чем 1 день до 04.14.2023 "4." => дата выплаты 06.11.2023 (понедельник), праздничный день, переносится на рабочий день => 07.11.2023 (вторник), по вторникам не выплачивают, переносится на 08.11.2023 (среду) |
Сообщ.
#2
,
|
|
|
Цитата rownong@yandex.ru @ Вопрос 1. Подскажите нужно ли для этого создавать PHP скрипт (т.к. стек на PHP) или можно решить задачу только SQL запросом? Возможны оба варианта. Решение только средствами SQL более разумно IMHO. Цитата rownong@yandex.ru @ Вопрос 2. При расчете как учитывать "вторник, четверг, выходной, праздничный"? Надо ли для этого создавать отдельную таблицу в БД с перечислением всех эти дней в году (чтобы их учитывал скрипт /sql запрос)? Вторник и четверг считаются напрямую по дате и никаких таблиц не требуют. Выходные и праздничные дни берутся из производственного календаря. Который хранится в отдельной таблице. |
Сообщ.
#3
,
|
|
|
Цитата Akina @ Вторник и четверг считаются напрямую по дате и никаких таблиц не требуют. Выходные и праздничные дни берутся из производственного календаря. Который хранится в отдельной таблице. Цитата Вторник и четверг считаются напрямую по дате и никаких таблиц не требуют. Выходные тоже (суббота и воскресенье)? Даже если чисто на SQL делать? Как это через SQL задается подскажите? Получается, мне производственный календарь найти и все праздничные дни выписать в таблицу (создать таблицу предварительно)? |
Сообщ.
#4
,
|
|
|
Производственный календарь содержит абсолютно все дни с соотв. признаками - субботы, воскресенья (между прочим, отдельно), праздничные, предпраздничные, и даже учитывает переносы выходных дней на рабочие и соотв. перемещение предпраздников.
|